1703 乘法运算的程序

 
描述

从键盘读入个100以内的正整数,进行乘法计算并输出。

输入

多组测试数据,每组测试数据包括两个整数m,n仅一行,以0 0 结尾。两个数的第一位和最后一位都不是0.

输出

输出格式: 两个乘数的末位数对齐 乘号后面紧跟着第二个乘数,线的长度以最长的数的位数为准,每两组测试数据中间,输出一个空行。

样例输入
89 13
2 3
0 0
样例输出
  89
 x13
----
 267
 89
----
1157

 2
x3
--
 6
来源
NOIP96

此题计算不需要考虑大精度,按照规则计算即可,每次要对数字取10的余数,这样才能提取出每一位,在输出上面要加以注意

#include <stdio.h>
#include <math.h>

int len(int temp)
{
	int i;
	for(i=0;temp/(int)pow(10.0,i) !=0 ;i++);
		if(i !=1 && temp % (int)pow(10.0,i) == 0)
				i++;
	return i;
}

int main()
{
	int a,b,temp,i,lenA,lenB,lenC,j,temp1,lenCC;
	scanf("%d %d",&a,&b);
	while(a !=0 && b!=0)
	{
		temp1=a*b;		
		lenA=len(a);
		lenB=len(b);
		lenC=lenCC=len(temp1);
		if(lenCC < lenA+1 || lenCC < lenB+1)
			lenC=lenCC+1;

		for(i=0;i<lenC-lenA;i++)
			printf(" ");
		printf("%d\n",a);
		for(i=0;i<lenC-lenB-1;i++)
			printf(" ");
		printf("x");
		printf("%d\n",b);
		for(i=0;i<lenC;i++)
		printf("-");
		printf("\n");
		
		
			for(i=1;i<=lenB;i++)
			{	
				temp=(b% (int)pow(10.0,i))/((int)pow(10.0,i-1))*a;
				lenA=len(temp);
				for(j=0;j<lenC-lenA-i+1;j++)
					printf(" ");
				printf("%d",temp);
				for(j=0;j<i-1;j++)
					printf(" ");
				printf("\n");
			}
		if(lenB > 1)
		{
			for(i=0;i<lenC;i++)
				printf("-");
			printf("\n");
			for(i=0;i<lenC-lenCC;i++)
					printf(" ");
				printf("%d\n",temp1);
		}
	scanf("%d %d",&a,&b);
	printf("\n");
		
	}
	return 0;
}


 

你可能感兴趣的:(1703 乘法运算的程序)