nyoj 105 九的余数(大数除小数) 水题



“弃9法”原理:任何一个整数模同余它的各数位上数字之和。
利用9的特性, 每隔十个数(0-9)的余数相等, 例如 123456789 % 9 == (1+2+3+4+5+6+7+8+9) % 9;
以后我们求一个整数被9除的余数,只要先计算这个整数各数位上数字之和,再求这个和被9除的余数即可。


Code:

#include<stdio.h>			//弃九法原理
#include<string.h>
char a[1000005];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",a);
        int sum=0,n=strlen(a);
        for(int i=0;i<n;i++)
        sum+=(a[i]-'0');
        printf("%d\n",sum%9);
    }
}


#include<stdio.h>			
#include<string.h>
char a[1000005];
int b[1000005];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",a);
        getchar();
        int n=strlen(a);
        for(int i=0;i<n;i++)
        b[i]=a[i]-'0';
        for(int i=1;i<n;i++)
        b[i]=(b[i-1]*10+b[i])%9;
        printf("%d\n",b[n-1]%9);
    }
}


你可能感兴趣的:(nyoj 105 九的余数(大数除小数) 水题)