07-0. 写出这个数
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10^100。
输出格式:
在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
#include <stdio.h>
#include <math.h>
void shuchu(int m);
int main()
{
int num,tem,sum=0;
int i,cnt=0,sig;
int tem2,ret;
printf("请输入小于10100的自然数:\n");
scanf("%d",&num);
tem=num;//保护输入的值
while(tem!=0)
{
i=tem%10;//取个位数
sum=sum+i;
tem=tem/10;//去掉个位数
}
//printf("num的各个位数和=%d\n",sum);
tem2=sum;
do{
tem2/=10;
cnt++;
}while(tem2!=0);//几位数 此时tem2为0
sig=pow(10,cnt-1);
//printf("%d\n",sig);
while(sig!=0)
{
ret=sum/sig;//120/100=1
sum%=10;//120-20
sig/=10;//10
//printf("%d\n",ret);
shuchu(ret);
if(sig!=0)//没有到最后一位 输出“ ”
{
printf(" ");
}
}
}
void shuchu(int m)
{
switch(m)
{
case 0:
printf("ling");
break;
case 1:
printf("yi");
break;
case 2:
printf("er");
break;
case 3:
printf("san");
break;
case 4:
printf("si");
break;
case 5:
printf("wu");
break;
case 6:
printf("liu");
break;
case 7:
printf("qi");
break;
case 8:
printf("ba");
break;
case 9:
printf("jiu");
break;
}
}
//无法满足超出int的测试用例,答案如中用到了数组,第八章我还没看~就先这样把~
//07-0. 写出这个数
#include <stdio.h>
#include <string.h>
const char *num[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int main()
{
char ch, number[10];
int s = 0, i;
while( (ch = getchar()) != '\n' )
{
s += ch-'0';
}
sprintf(number, "%d", s);
printf("%s", num[number[0]-'0']);
for ( i=1; i<strlen(number); i++ )
{
printf(" %s", num[number[i]-'0']);
}
printf("\n");
return 0;
}
07-1. 换个格式输出整数
让我们用字母B来表示“百”、字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数。例如234应该被输出为BBSSS1234,因为它有2个“百”、3个“十”、以及个位的4。
输入格式:
每个测试输入包含1个测试用例,给出正整数n(<1000)。
输出格式:
每个测试用例的输出占一行,用规定的格式输出n。
输入样例1:
234
输出样例1:
BBSSS1234
输入样例2:
23
输出样例2:
SS123
#include <stdio.h>
void shuchu(int m,char n);
void bianli(int num);
int main()
{
int n,tem;
int cnt=0;//计数器一开始一定要初始化!!!
int ge;
printf("请输入一个1000以内的正整数:\n");
scanf("%d",&n) ;
tem=n;
do{
tem/=10;
cnt++;
}while(tem!=0);//几位数-tem=0
printf("输入的数是%d位数\n",cnt);
if(cnt==3)
{
shuchu(n/100,'B');
shuchu(n%100/10,'S');
ge=n%100%10;
bianli(ge);
}
else if(cnt==2){
shuchu(n/10,'S');
ge=n%10;
bianli(ge);
}
else if(cnt==1){
bianli(n);
}
// int a=2;
// char b='B';//字符的定义!!!单引号!!
// shuchu(a,b);
}
void shuchu(int m,char n)
{
int i;
for(i=1;i<=m;i++)
{
printf("%c",n);
}
}
void bianli(int num)
{
int i;
for(i=1;i<=num;i++){
printf("%d",i);
}
}
cnt计数器一定要注意初始化!!!没有cnt=0,系统默认为1了。。。
do{
tem/=10;
cnt++;
}while(tem!=0);//几位数-tem=0
字符的定义!!!单引号!!
char b='B';//
07-2. A+B和C
给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。
输入格式:
输入第1行给出正整数T(<=10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给出A、B和C。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出“Case #X: true”如果A+B>C,否则输出“Case #X: false”,其中X是测试用例的编号(从1开始)。
输入样例:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样例:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
//给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。
//其实就是int
#include<stdio.h>
void compute(int n, int i ,int j ,int k) ;
int main()
{
int n,i;
int a,b,c;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d %d %d",&a,&b,&c);
compute(i,a,b,c);
}
}
void compute(int n, int i ,int j ,int k)
{
if(i+j>k)
{
printf("Case #%d: true\n",n);
}
else{
printf("Case #%d: false\n",n);
}
}
07-3. 数素数
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
//n个素数之间 输出第5个到第27个之间的
#include <stdio.h>
void sushu(int a,int b);
int main()
{
int m,n;
scanf("%d %d",&m ,&n);
sushu(m,n);
}
void sushu(int a,int b)
{
int i,j;
int cnt=0;
int sig,p=0;
for(i=2;i<=10000;i++){//判断是不是素数
sig=1;//注意sig每次都要变回来
for(j=2;j<i;j++)
{
if(i%j==0)
{
sig=0;
continue;
}
}
if(sig==1){
cnt++; //每个素数都计数一次
if (cnt<=b&&cnt>=a){//输出区间内的素数
printf("%d",i);
p++;//每10个数字占1行,其间以空格分隔,
if(p%10!=0){
printf(" ");
}
else printf("\n");//但行末不得有多余空格。
}
}
}
}
素数判断,注意标志变量值的变化