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
1 #include <stdio.h> 2 int main() 3 { 4 int i,j,k,T; 5 scanf("%d",&T); 6 long long a,b; 7 while(T--) 8 { 9 scanf("%lld%lld",&a,&b); 10 if(0 == a || 0 == b) 11 { 12 printf("0\n"); 13 continue; 14 } 15 int temp = (int)((a%9LL)*(b%9LL)%9LL); 16 if(0 == temp) 17 printf("9\n"); 18 else 19 printf("%d\n",temp); 20 } 21 return 0; 22 } 23
1 //说实话刚开始看到(0<=m,n<=10^12)没想起long long但后来一想10^12 * 10^12就超 long long 啦,但一看报告才想起乘法求余定理就可 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 int main() 7 { 8 int i,j,k,T; 9 cin>>T; 10 long long a,b; 11 while(T--) 12 { 13 cin>>a>>b;//sacnf("%lld",&a) 14 int temp = (a%9LL)*(b%9LL)%9; 15 if(0 == temp) 16 cout<<9<<endl; 17 else 18 cout<<temp<<endl; 19 } 20 return 0; 21 } 22 //继续超时 ,但我感觉应该判为wa,因为其中之一为0就需输出0而不是9 23 24
1 /* 2 一个数对九取余后的结果称为九余数。 3 一个数的各位数字之和想加后得到的<10的数字称为这个数的九余数(如果相加结果大于9,则继续各位相加) 4 */ 5 #include <iostream> 6 #include <cstring> 7 using namespace std; 8 9 int main() 10 { 11 int i,j,k,T; 12 cin>>T; 13 int str[15]; 14 while(T--) 15 { 16 char str1[15] = {'\0'},str2[15] = {'\0'}; 17 memset(str,0,sizeof(str)); 18 cin>>str1>>str2; 19 int len1 = strlen(str1); 20 int len2 = strlen(str2); 21 for(i=0; i<len1; i++) 22 for(j=0; j<len2; j++) 23 { 24 str[i+j] += (str1[i] - '0')*(str2[j] - '0'); 25 } 26 int len = sizeof(str)/sizeof(int); 27 int ans = 0; 28 for(i=0; i<len; i++) 29 ans += str[i]; 30 int temp = ans%9; 31 if(0 == temp) 32 cout<<9<<endl; 33 else 34 cout<<temp<<endl; 35 36 } 37 return 0; 38 } 39 //超时 40 41
1 //今天发现dev的一个功能,按住ctrl + shift,鼠标指向某个变量或者字符串(鼠标为手形),点击,那么鼠标就会调至定义处 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 int main() 7 { 8 int i,j,k,T; 9 cin>>T; 10 int str[15]; 11 while(T--) 12 { 13 //memset(str1,0,sizeof(str1)); 14 //memset(str2,0,sizeof(str2)); 15 char str1[15] = {'\0'},str2[15] = {'\0'}; 16 memset(str,0,sizeof(str)); 17 cin>>str1>>str2; 18 int len1 = strlen(str1); 19 int len2 = strlen(str2); 20 for(i=0; i<len1; i++) 21 for(j=0; j<len2; j++) 22 { 23 str[i+j] += (str1[i] - '0')*(str2[j] - '0'); 24 } 25 int len = sizeof(str)/sizeof(int); 26 int ans = 0; 27 for(i=0; i<len; i++) 28 ans += str[i]; 29 int temp = 0; 30 while(ans > 0) 31 { 32 temp += ans%10; 33 ans /= 10; 34 if(temp>10 && ans==0)//ans == 0必加 35 { 36 ans = temp; 37 temp = 0; 38 } 39 } 40 cout<<temp<<endl; 41 //memset(str,0,sizeof(str)); 42 } 43 return 0; 44 } 45 //继续超时 46 47