题目大意:给出一个整数。让你求它各数位数字之和.(若在这一过程中得到的数字之和>=10则继续运算).
解题思路:其实这道题抽象一下就是,要你"遍历一个数字".但是与简单的遍历一个数字不同的是,这道题的数字可能很长,超出所有整数类型所能表示
的范围。所以在对数字进行便利的基础上我们还要进行一些其他的处理。
代码如下:
/*
* 1032_2.cpp
*
* Created on: 2013年8月11日
* Author: Administrator
*/
#include <iostream>
using namespace std;
int main(){
char c;
int sum = 0;
while(c = getchar()){
if(c =='\n'){
cout<<sum <<endl;
sum = 0;//每次将sum输出后都要将sum清零,用来记录下一个数的digit root
c = getchar();
if(c == '0'){
break;
}else{
sum += c - '0';
}
continue;
}
sum += c - '0';
/**
* 其实只需处理一次即可,因为对sum处理的及时,所以sum不可能大于18
* 即,用if来判断即可
*/
while(sum > 9){
sum = sum %10 + sum/10;
}
}
}
以下代码是WA代码。主要是测试数据中的数据可能很大。超出int。。。。之类的所能表示的范围.
/*
* 1013_1.cpp
*
* Created on: 2013年8月11日
* Author: Administrator
*/
#include <iostream>
using namespace std;
int getroot(__int64 n) {
int sum =0;
if(n<10){
return n;
}else{
while(n!=0){
int temp = n%10;
sum += temp;
n /= 10;
}
return sum>=10?getroot(sum):sum;
}
}
int main() {
__int64 n;
while (cin >> n) {
int sum = getroot(n);
cout << sum << endl;
}
}