首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

高位乘法运算解决方法

2012-04-18 
高位乘法运算#includestdio.hvoid ok(int *t,int n,int j){int tempfor(int i399i400-n*ji--){temp

高位乘法运算
#include<stdio.h>
void ok(int *t,int n,int j)
{
int temp;
for(int i=399;i>400-n*j;i--)
{
temp=t[i]/10;
t[i]%=10;
t[i-1]+=temp;
}
}
void print(int *t,int i,int j)
{
for(int n=400-i*j;n<400;n++)
printf("%d",t[n]);
printf("\n");
}
int main()
{
static int ch[200],sh[200];
static int zh[400];
int temp,temp1,n=399,n1=399,i=0,j=0;
int d=0;
printf("数组ch[200]:");
while(i<200)
{
scanf("%d",&d);
if(d>=10||d<0)
break;
ch[i++]=d;
}
printf("数组sh[200]:");
while(j<200)
{
scanf("%d",&d);
if(d>=10&&d<0)
sh[j++]=d;
}
for(int k=i-1;k>=0;k--)//重心
{
for(int v=j-1;v>=0;v--)
{
zh[n--]=ch[k]*sh[v];
}
n1-=1;
n=n1;
}
ok(zh,i,j);
print(zh,i,j);
return 0;
}
这是道两个两百位以内整数相乘的算法,不知哪儿错了!帮忙看看吧!

[解决办法]

C/C++ code
#include <stdio.h> #include <string.h> #include <stdlib.h>#define MAX_LEN 200 unsigned an1[MAX_LEN+10]; unsigned an2[MAX_LEN+10]; unsigned aResult[MAX_LEN * 2 + 10]; char szLine1[MAX_LEN+10]; char szLine2[MAX_LEN+10]; int main() {     gets( szLine1); //gets 函数读取一行     gets( szLine2);     int i, j;     int nLen1 = strlen( szLine1);     memset( an1, 0, sizeof(an1));     memset( an2, 0, sizeof(an2));     memset( aResult, 0, sizeof(aResult));     j = 0;     for( i = nLen1 - 1;i >= 0 ; i --)         an1[j++] = szLine1[i] - '0';     int nLen2 = strlen(szLine2);     j = 0;     for( i = nLen2 - 1;i >= 0 ; i --)         an2[j++] = szLine2[i] - '0';     for( i = 0;i < nLen2; i ++ )     { //每一轮都用an1 的一位,去和an2 各位相乘         //从an1 的个位开始         for( j = 0; j < nLen1; j ++ )     //用选定的an1 的那一位,去乘an2 的各位             aResult[i+j] += an2[i]*an1[j]; //两数第i, j 位相乘,累加到结果的第i+j 位     }     //下面的循环统一处理进位问题     for( i = 0; i < MAX_LEN * 2; i ++ )           {         if( aResult[i] >= 10 ) {             aResult[i+1] += aResult[i] / 10;             aResult[i] %= 10;         }     }     //下面输出结果     bool bStartOutput = false;     for( i = MAX_LEN * 2; i >= 0; i -- )         if( bStartOutput)             printf("%d", aResult[i]);         else if( aResult[i] ) {             printf("%d", aResult[i]);             bStartOutput = true;         }         if(! bStartOutput )             printf("0");         system("pause");        return 0; } 

热点排行