//前面是我的思路,可以直接跳到后面/
下面这个是自己摸索着写的,由于puts函数,没能按题目要求给出空格,因为直接换行了…
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//10的100次方,有101位,小于他,那么最大数就是100个9,sum最大999
int main()
{
int i,sum=0;
char pinyin[10][4]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//二维数组,第一维放字符,第二维相当于字符串
char s[100];
gets(s);
for(i=0;s[i]!='\0';i++)//或者用for(i=0;s[i]<=strlen(s);i++)
{
sum+=s[i]-'0';//字符用'',字符串用""
}
if(sum/100>0)
{
puts(pinyin[sum/100]);
puts(pinyin[sum%100/10]);
puts(pinyin[sum%10]);
}
else if(sum/100==0&&sum/10>0)
{
printf("%s %s",pinyin[sum%100/10],pinyin[sum%10]);
}
else if(sum/10==0)
{
puts(pinyin[sum%10]);
}
return 0;
}
scanf无法接收进来空格,scanf碰到空白字符就会结束(空格 TAB 回车都算空白字符)
gets会将回车之前的字符全部接收进来。
puts函数会自动换行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//10的100次方,有101位,小于他,那么最大数就是100个9,sum最大999
void put1(const char * string) //改进的put1函数,不自动换行
{
while(*string!='\0')//*string是*string!='\0'的简便写法
putchar(*string++);
}
int main()
{
int i,sum=0;
char pinyin[10][4]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//二维数组,第一维放字符,第二维相当于字符串
char s[100];
gets(s);
for(i=0;s[i]!='\0';i++)//或者用for(i=0;s[i]<=strlen(s);i++)
{
sum+=s[i]-'0';//字符用'',字符串用""。这里是用来强制类型转换
}
if(sum/100>0)
{
put1(pinyin[sum/100]);
printf(" ");
put1(pinyin[sum%100/10]);
printf(" ");
put1(pinyin[sum%10]);
}
else if(sum/100==0&&sum/10>0)
{
put1(pinyin[sum%100/10]);
printf(" ");
put1(pinyin[sum%10]);
}
else if(sum/10==0)
{
put1(pinyin[sum%10]);
}
return 0;
}
可惜不知道有个啥错误,好像gets函数不安全还是指针问题。。不太懂,友友们懂得话请指教。
这次直接过了
#include<stdio.h>
#include<string.h>
int main()
{
char num[101];
int result[3];
char py[10][5]={"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
gets(num);
int sum=0,i,j=0;
for(i=0;i<strlen(num);i++)
{
sum+=num[i]-'0';
}
while(sum)
{
result[j++]=sum%10;
sum/=10;
}
for(i=j-1;i>0;i--)//当sum是3位数是,j为3,这里i为2,循环两次带空格的输出
printf("%s ",py[result[i]]);
printf("%s",py[result[0]]);
return 0;
}