codeup问题 C: 特殊乘法

题目描述

写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5

输入

 两个小于1000000000的数

输出

 输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。

 

下面会先给出我自己第一次写的程序,然后会给出在参考各种方法后的比较简洁的程序

#include
#include 
//date 2019.7. 10 
//by lmc 
//程序总体思想是想通过把输入作为字符串形式储存在字符数组
//因为储存方式为字符串,所以取出数组元素时-‘0’即减48。得到的就是所需数字
 
int* get(char *a,int *q,int len);
long multiply(int *q1,int *q2);
int main()
{
	char a[20]={'0'},b[20]={'0'};
	int n1,n2;
	
	while(scanf("%s %s",a,b)!=EOF)
	{
		int q1[20]={0},q2[20]={0};
		n1=strlen(a);	
		n2=strlen(b);		 
		get(a,q1,n1);				 
		get(b,q2,n2);
		int res=multiply(q1,q2);	 
		printf("%d\n",res);
	}
	
}
int* get(char *a,int *q,int len)	//int*就是一个返回值为地址的函数 
{									//在定义函数时,若传入的是一个地址
									//用指针接收。如主函数中调用get时a和q1 
	for(int i=0;i

还有一种更加简便的方法


#include 

int main() {

    char a[11], b[11];	// 给出比输入位数多一位的数组,因为要储存 
						//字符串结束符'\0' 
    int i,j;

    while(scanf("%s %s",a,b)!=EOF) //在用scanf输入字符串时会在结尾自动添加'\0' 
	{			//所以每次输入都可以通过对'\0'的判断来得到 
				//字符串的长度 
        int ans = 0;

        for(i=0;a[i]!=0;i++)		//通过a[i]!='\0'。ps:'\0'的ascll码等于0 
        	for(j=0;b[j]!=0;j++) 
             ans += (a[i]-'0')*(b[j]-'0'); //因为是用字符数组储存 
					//所以在取用数字时需要减'0',即减去48 
        printf("%d\n",ans);

    }

    return 0;

}

 

你可能感兴趣的:(codeup问题 C: 特殊乘法)