1 solutions

  • 0
    @ 2021-11-13 17:00:42

    题意

    就是反复求各个位数上的数字之和直到小于10为止。由于本题最长也就20喂数,所以第二次处理最多也就20*9=180,第二次最大才一百八,也就是我们只要用字符串读进来那么后面的处理就可以用数字进行处理了。


    本题的唯一卡点就在于一个大数的读入,大数的处理就是一个字符串处理,最主要的核心就是对ASCII码的理解,比如字符'1'减去字符'0',因为字符'1'和字符'0'的ASCII码相差1,所以字符'1'减去'0'就可以得到整数 1 ,因此,本题就可以用这个方法进行处理

    例如

    输入;19591564678945613245987 此时的大小已经超过了longlong的范围,所以我们用读字符串的方法将其读进来。 再用for循环挨个位数处理

    int num=0;
    for(int i=0;i<strlen(s);i++)
    {
    sum+=s[i]-'0';
    }
    

    这样得到的最大的数也就是180所以接下来的步骤就直接可以用数字来处理了。

    附上ac代码。

    #include<stdio.h>
    #include<string.h>
    char arr[1000];
    int len,sum;
    int main()
    {
    	scanf("%s",arr);
    	len=strlen(arr);
    	for(int i=0;i<len;i++){
    		sum+=(arr[i]-'0');
    	}
    	while(sum>10){
    		int t=sum;
    		sum=0;
    		while(t>0){
    			int k=t%10;
    			sum+=k;
    			t=t/10;
    		}
    	}
    	printf("%d",sum);
    	return 0;
    }
    
    • 1

    Information

    ID
    161
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    8
    Tags
    # Submissions
    170
    Accepted
    24
    Uploaded By