NYOJ 485

题目:

A*B Problem

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
 
描述
设计一个程序求出A*B,然后将其结果每一位相加得到C,如果C的位数大于等于2,继续将C的各位数相加,直到结果是个一位数k。

例如:

6*8=484+8=121+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
View Code

自己的代码:超时

 1 #include <iostream>
 2 #include <string.h>
 3 using namespace std;
 4 
 5 char a[15],b[15];
 6 int results[30],len_results=0;
 7 
 8 int* Mulit(char *a,char *b)
 9 {
10     int len_a=strlen(a);
11     int len_b=strlen(b);
12     int begin_pos=0,i;
13     memset(results,0,30*sizeof(int));
14     for(i=0;i<len_a;i++)
15     {
16         for(int k=0;k<len_b;k++)
17         {
18             results[begin_pos+k]+=(a[i]-48)*(b[k]-48);
19         }
20         begin_pos++;
21     }
22     len_results=begin_pos+len_b-1;
23     return results;
24 }
25 
26 int main()
27 {
28     int n;
29     cin>>n;
30     while (n--)
31     {
32         cin>>a>>b;
33         Mulit(a,b);
34         int sum=0,k=0;
35         for(int i=0;i<len_results;i++)
36         {
37             sum+=results[i];
38         }
39         if(sum<10)
40             cout<<sum<<endl;
41         else if(sum%9==0)
42             cout<<9<<endl;
43         else
44             cout<<sum%9<<endl;
45     }
46     return 0;
47 }
View Code

自我感觉我这代码算是比较简洁的了,难道是思路上还有要改进的地方???再仔细想想

posted @ 2013-08-22 10:02  光辉灿烂的日子  阅读(212)  评论(0编辑  收藏  举报