程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> A*B Problem

A*B Problem

編輯:C++入門知識

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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved