NYOJ 485

 

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           

 

你可能感兴趣的:(OJ)