该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#define _CRT_SECURE_NO_WARNINGS
#include
#include
//取出位数
int wei(int n)
{
int num = 0;
for (; n > 0; n /= 10)
num++;
return num;
}
//将位数大的放第一个,方便相乘
void swap(int *a, int *b)
{
int anum = wei(*a);
int bnum = wei(*b);
int temp;
if (anum < bnum)
{
temp = *a;
*a = *b;
*b = temp;
}
else
return;
}
void main()
{
int a,b;
printf("input:");
scanf("%d%d", &a, &b);
swap(&a, &b); //检测一下a,b位数的大小,保证位数大在最前边
int btemp = b; //用btemp保存b的值,作为备份,下面的计算会影响b的值
int anum = wei(a); //取出a的位数
int bnum = wei(b); //取出b的位数
int pos =wei(a*b); //确定相乘以后的位数,方便布局
printf("out:\n");
for (int i = 0; i < pos-anum+1; i++)
printf(" ");
printf("%d\n", a);
for (int i = 0; i < pos - bnum-1; i++)
printf(" ");
printf("* ");
printf("%d\n", b);
for (int i = 0; i < pos+5; i++)
printf("-");
printf("\n");
//取出b的每一位与a相乘
for (int i = 0; i < bnum; i++)
{
int x, mul,mulwei;
x = b % 10;
b/=10;
mul = x*a;
mulwei = wei(mul); //取出b的每一位与a相乘的位数
for (int j = 0; j < pos - mulwei+1-i; j++) //减i是因为b的每一位与a相乘要错一个位置
printf(" ");
printf("%d\n", mul);
}
for (int i = 0; i < pos + 5; i++)
printf("-");
printf("\n");
printf(" %d\n",a*btemp); //输出最后的结果
system("pause");
}
VS2013环境