本帖最后由 xiaojuan 于 2014-9-24 22:38 编辑
////////////////////////////////////////////////////////
//功能:实现两个64位以下数的相乘
//作者:豆腐干
//时间:2014年9月22日 14:10:47
//如果想运算更大的数据只需要更改数组大小便可
////////////////////////////////////////////////////////
#include<stdio.h>
#include<string.h>
int main(void)
{
char buf1[64] ="12345678912345678912345678912345678912345678912345678912345678";
char buf2[64] ="98765432198765432198765432198765432198765432198765432198765432";
char dest[64 * 64 * 4]; //存放过程数值
char result[128 * 2] = {0}; //存放结果
char *temp1 = buf1;
char *temp2 = buf2;
char *temp3 = dest;
char *temp4 = dest;
char *temp5 = result;
int len1, len2, temp, flag = 0, num;
len1 = strlen(buf1);
len2 = strlen(buf2);
printf("%s\n%s\n", buf1, buf2);
int i, j;
for(i = 1; i < len2 + 1; i++)
{
for(j = 1; j < i; j++)
{
*temp3 = '0';
temp3++;
}
for(j = 1; j < len1 + 1; j++)
{
temp = (*(temp1 + len1 - j) - '0') * (*(temp2 + len2 - i) -'0');
num = temp % 10 + flag;
flag = temp / 10;
if(num / 10)
{
flag += num / 10;
num = num % 10;
}
*temp3 = num + '0';
temp3++;
}
if(flag)
{
*temp3 = flag + '0';
temp3++;
flag = 0;
}
else
{
*temp3 = '0';
temp3++;
}
for(j = 1; j < len2 - i + 1; j++)
{
*temp3 = '0';
temp3++;
}
}
*temp3 = '\0';
printf("%s\n", dest);
for(i = 0; i < len1 + len2; i++)
{
temp = 0;
for(j = 0; j < len2; j++)
{
temp3 = temp4;
temp += (*(temp3 + (len1 + len2) * j) - '0');
}
temp += flag;
flag = 0;
if(temp / 10)
{
flag = temp / 10;
temp = temp % 10;
}
temp4++;
*temp5 = temp + '0';
temp5++;
*temp5 = '\0';
}
for(i = 0; i <= len1 + len2; i++)
{
printf("%c", *(temp5--));
}
putchar('\n');
return 0;
}
//运行环境:Linux
//注:1.输入问题 我用scanf函数试了下有问题
// 2.输出如果最高位是0,没做处理
|