hdu 1013

来源:互联网 发布:局域网控制电脑软件 编辑:程序博客网 时间:2024/06/05 16:37

题目大意:给出一个整数。让你求它各数位数字之和.(若在这一过程中得到的数字之和>=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 rootc = 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;}}



原创粉丝点击