A*B Problem
時間限制:1000 ms | 內存限制:65535 KB
難度:2
描述
設計一個程序求出A*B,然後將其結果每一位相加得到C,如果C的位數大於等於2,繼續將C的各位數相加,直到結果是個一位數k。例如:6*8=48;
4+8=12;
1+2=3;
輸出3即可。
輸入
第一行輸入一個數N(0<N<=1000000),表示N組測試數據。 隨後的N行每行給出兩個非負整數m,n(0<=m,n<=10^12)。
輸出
對於每一行數據,輸出k。
樣例輸入
3
6 8
1234567 67
454 1232
樣例輸出
3
4
5
該題參考了南陽理工解題報告網 :
分析:對於一個整數n,設f(n)為n的各個位之和,有這樣一個等式 n%9=f(n)%9; 證明:同余定理(a+b)%c=(a%c+b%c)%c,還有顯然成立和k*(10^M)%9=k,代入到n%9=f(n)%9中, 即可得證n%9=f(n)%9是成立的。 還要注意我們所求的是一個一位數,而我們是對9取余的,當余數為0時,我們要的結果可能是0,可能是9。是0的情況,只有開始時兩個乘數至少有一個為0。其他情況為9
#include
int main()
{
long long m,n;int d,t;scanf("%d",&d);
while(d--)
{
scanf("%lld%lld",&m,&n);
if(m==0||n==0)printf("0n");
else
{
int t=(m%9)*(n%9)%9;
if(t==0) t=9;printf("%dn",t);
}
}
return 0;
}