安徽大学第九届大学生程序设计竞赛 网络预选赛 B

来源:互联网 发布:.ape 文件播放软件 编辑:程序博客网 时间:2024/04/30 00:29

B. 迭代归一
Time Limit: 1000 ms   Memory Limit: 64 MB
Total Submission: 323   Submission Accepted: 74
Description
我们把一个正整数的每一位上的数字加起来,得到新的数字,我们把这样的一次操作称为一次迭代变换。直到这个数字只有一位数。
如,9876经过一次变换成为9+8+7+6=30,经过第二次变换成为3+0=3,结束。
那么9876就经过了两次迭代变换。如今给一个正整数,问需要迭代变换多少次后会停止。

Input
一个整数t,表示测试数据组数(1<=t<=100)。
对于每组测试数据,只有一行,表示一个正整数,正整数最多有100000位。

Output
输出若干行,每行对应每组数据需要迭代变换的次数

Sample Input
OriginalTransformed
321099999999

Sample Output
OriginalTransformed
012

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;char num[100005];int fun(int n){    int yushu = 0;    while(n > 0)    {        yushu += n % 10;        n /= 10;    }    return yushu;}int main(){int t, snum;scanf("%d", &t);while(t--){    scanf("%s",num);    if(strlen(num) == 1) printf("0\n");    else{            snum = 0;        for(int i = 0; i < strlen(num); i++)        {            snum += num[i] - '0';        }        if(snum < 10) {printf("1\n"); continue;}        int i;        for( i = 2; ; i++)        {            snum = fun(snum);            if(snum < 10) break;        }        printf("%d\n", i);    }}    return 0;}

0 0
原创粉丝点击