题目描述
写个算法,对2个小于1000000000的输入,求结果。特殊乘法举例:123 * 45 = 1*4 +1*5 +2*4 +2*5 +3*4+3*5
输入
两个小于1000000000的数
输出
输入可能有多组数据,对于每一组数据,输出Input中的两个数按照题目要求的方法进行运算后得到的结果。
样例输入
24 65 42 66666 3 67
样例输出
66 180 39
#include <stdio.h>
int numlong(int n) //求几位数
{
int step=0;
while(n)
{
n=n/10;
step++;
}
return step;
}
int main()
{
int a,b,i,j,a1,b1,sum=0,B;
while (scanf("%d %d",&a,&b)!=EOF)
{
int longa=numlong(a);
int longb=numlong(b);
B=b;
for (i=0;i<longa;i++)
{
a1=a%10;
for (j=0;j<longb;j++)
{
b1=b%10;
sum=sum+a1*b1;
b=b/10; //一开始这里出了问题,b成0了之后,a的前位乘不到b
} //新建立一个变量,里面循环一次之后,将b重置
a=a/10;
b=B;
}
printf("%d\n",sum);
sum=0;
}
return 0;
}
后面又发现其实这个和可以是两个数的位数和相乘,例如24和6666,可以算为(2+4)*(6+6+6+6+)
于是,写为:
#include <stdio.h>
int weishuhe(int n) //求数字的位数和
{
int m,sum=0;
while(n)
{
m=n%10;
sum+=m;
n=n/10;
}
return sum;
}
int main()
{
int a,b;
while (scanf("%d %d",&a,&b)!=EOF)
{
int a1=weishuhe(a);
int b1=weishuhe(b);
printf("%d\n",a1*b1);
}
return 0;
}