C语言数组任务(3),快速采纳
发布网友
发布时间:2023-07-22 23:28
我来回答
共6个回答
热心网友
时间:2023-10-01 20:29
#include <stdio.h>
#include <string.h>
void putout(int result[], int n=16);
void moveforward(int result[], int n)
{
if( n==0) return;
int i;
for(i=n; i<=16; ++i) result[i-n] = result[i];
for(i=16-n; i<16; ++i)result[i] = 0;
}
void getMul(int result[], int param[], int n=8)
{
int i, j;
int *tmp = new int[16];
int *param_tmp = new int[8];
for(i=0; i<16; ++i)
{
tmp[i] = 0;
if(i>=8) param_tmp[i-8] = result[i];
}
for(i=0; i<16; ++i) result[i] = 0;
for(i=0; i<n; ++i)
{
for(j=0; j<16; ++j) tmp[j] = 0;
for(j=0; j<8; ++j) tmp[j+8] = param_tmp[j]*param[7-i];
for(j=15; j>=0; --j)
{
if(tmp[j]>=10)
{
if(j>0) tmp[j-1] += tmp[j]/10;
tmp[j] = tmp[j]%10;
}
}
moveforward(tmp, i);
for(j=15; j>=0; --j)
{
result[j] += tmp[j];
if(result[j]>=10)
{
if(j>0) result[j-1] += result[j]/10;
result[j] = result[j]%10;
}
}
}
}
void putout(int result[], int n)
{
int i(0);
while(result[i] == 0) ++i;
//printf("result:");
for(; i< n; ++i) printf("%d",result[i]);
//printf("\n");
}
void main()
{
char param1[9], param2[9];
int result[16], param[8];
printf("Input two number:");
scanf("%s", param1);
scanf("%s", param2);
int i, j(0);
for(i=0; i<16; ++i)
{
if(i<8) param[i] = 0;
result[i] = 0;
}
j=0;
for(i=strlen(param1)-1; i>=0; --i, j++) result[15-j] = param1[i]-'0';
j=0;
for(i=strlen(param2)-1; i>=0; --i, j++) param[7-j] = param2[i]-'0';
getMul(result, param, strlen(param2));
printf("%s*%s=", param1, param2);
putout(result);
printf("\n");
}
热心网友
时间:2023-10-01 20:30
楼主很懒?
热心网友
时间:2023-10-01 20:30
恩 很有道理
热心网友
时间:2023-10-01 20:31
一般方法计算,
找一个高级一点的电脑专家
热心网友
时间:2023-10-01 20:32
等得急 晚上给你.
热心网友
时间:2023-10-01 20:32
//---------------------------------------------------------------------------
#include <string.h>
#include <stdio.h>
int plus(int x[16][16],int i) /*用于计算最后的相加结果*/
{
int j,t=0;
for (j=0; j<16; j++) {
t+=x[j][i];
}
return t;
}
int main(void)
{
int x[16][16]={0},xp[16]={0},len_a,len_b,i,j,lx,l;
char as[9],bs[9];
long int a,b,t;
do{
scanf("%ld%ld",&a,&b);
if (a<b) {
t=a;
a=b;
b=t;
}
sprintf(as,"%ld",a);
sprintf(bs,"%ld",b);
len_a=strlen(as);
len_b=strlen(bs);
}while (len_a>8);/*do-while循环用于确保数字长度不大于8位*/
lx=len_a+len_b-1;
for (i = len_b-1; i>=0; i--) {
l=--lx;
for (j=len_a-1; j>=0; j--) {
t=(bs[i]-48)*(as[j]-48);
if (t>=10) {
x[len_b-1-i][l]+=t%10;
x[len_b-1-i][l-1]+=t/10;
}
else x[len_b-1-i][l]+=t;
if (x[len_b-1-i][l]>=10) {
x[len_b-1-i][l-1]+=x[len_b-1-i][l]/10;
x[len_b-1-i][l]%=10;
}
l--;
}
}
for (i=15; i >=0; i--) {
t=plus(x,i);
if (t>=10) {
xp[i-1]+=t/10;
}
xp[i]+=t%10;
if (xp[i]>=10) {
xp[i-1]+=xp[i]/10;
xp[i]%=10;
}
}
printf("%s*%s=",as,bs);
for (i=0; i<len_a+len_b-1; i++) {
printf("%d",xp[i]);
}
putchar('\n');
return 0;
}
//---------------------------------------------------------------------------