从键盘读入个100以内的正整数,进行乘法计算并输出。
多组测试数据,每组测试数据包括两个整数m,n仅一行,以0 0 结尾。两个数的第一位和最后一位都不是0.
输出格式: 两个乘数的末位数对齐 乘号后面紧跟着第二个乘数,线的长度以最长的数的位数为准,每两组测试数据中间,输出一个空行。
89 13 2 3 0 0
89 x13 ---- 267 89 ---- 1157 2 x3 -- 6
此题计算不需要考虑大精度,按照规则计算即可,每次要对数字取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; }