1013:Digital Roots
注意:大数要用字符串表示!
sprintf:字符串格式化命令
主要功能:将格式化的数据写入某个字符串缓冲区
头文件:<stdio.h>
原型
int sprintf( char *buffer, const char *format, [ argument] … );
参数列表
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
返回值
返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。
代码实现:
1 #include <iostream> 2 #include <string> 3 #include <stdio.h> 4 using namespace std; 5 6 int main() 7 { 8 /*注意:大数要用字符串表示*/ 9 string str; 10 while(cin>>str && str != "0") 11 { 12 while(str.length()>1) 13 { 14 int sum = 0; 15 for(int i = 0;i<str.length();i++) 16 { 17 switch(str[i]) 18 { 19 case '0': 20 sum += 0; break; 21 case '1': 22 sum += 1; break; 23 case '2': 24 sum += 2; break; 25 case '3': 26 sum += 3; break; 27 case '4': 28 sum += 4; break; 29 case '5': 30 sum += 5; break; 31 case '6': 32 sum += 6; break; 33 case '7': 34 sum += 7; break; 35 case '8': 36 sum += 8; break; 37 case '9': 38 sum += 9; break; 39 } 40 } 41 char b[10]; 42 sprintf(b,"%d",sum); 43 str = b; 44 } 45 cout<<str<<endl; 46 } 47 /*超时 48 while(1) 49 { 50 int x; 51 cin>>x; 52 int y = x; 53 int s = 0; 54 if(x==0) break; 55 else 56 { 57 while(y>9) 58 { 59 s += y%10; 60 y = y/10; 61 if(y<10) 62 { 63 s += y; 64 if(s>9) 65 { 66 y = s; 67 s = 0; 68 } 69 else 70 { 71 cout<<s<<endl; 72 } 73 } 74 } 75 } 76 } 77 */ 78 return 0; 79 }