欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3492|回復: 0
收起左側

實現兩個大數(64位)相乘函數簡單實現

[復制鏈接]
ID:51090 發表于 2014-9-24 22:20 | 顯示全部樓層 |閱讀模式
本帖最后由 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,沒做處理


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表