ورود

View Full Version : ضرب دو عدد 20رقمی



سایان گستر
شنبه 22 اردیبهشت 1386, 10:15 صبح
:چشمک: با سلام
اگه میشه اشکال برنامه ی زیر رو بگین
#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{
int i,j,a,b,s=0,r,k,r1,k1,sum=0,n1;
char num1[21],num2[21];
int table[22][42]={0};
clrscr();

printf("\nenter num1:\n");
scanf("%s",num1);
printf("\nenter num2:\n");
scanf("%s",num2);
for(i=19,a=0;i>=0&&a<21;i--,a++)
for(j=19,b=41;j>=0&&b>=0;j--,b--)
{
s=(num1[i]-48)*(num2[j]-48);
r=s%10;
k=s/10;
if(a!=0&&i!=19)
{
b=b-a;
for(b=41;b<=b-a;b--)
table[a][b]=0;
for(b=b-a;b>=0;b--)
{
table[a][b]=(table[a][b]+r)%10;
table[a][b-1]=(k+table[a][b]/10)%10;
}
}
else
{
table[a][b]=(table[a][b]+r)%10;
table[a][b-1]=(k+(table[a][b]+r)/10)%10;
}
}
for(b=41;b>=0;b--)
{
for(a=0;a<=21;a++)
sum+=table[a][b];
r1=sum%10;
k1=sum/10;
table[21][b]=(table[a][b]+r1)%10;
table[21][b-1]=((table[a][b]+r1)/10+k1)%10;
printf("%d",table[21][b]);
}
getch();
return 0;
}

Amin.Abouee
شنبه 22 اردیبهشت 1386, 16:17 عصر
من الگوریتمی برای این سوال طراحی کردم که قادر است یک عدد n رقمی را در یک عدد n رقمی دیگر ضرب کند

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
string f_num="";
string s_num="";
vector <int> second,first;
int temp=0;
int rest=0;
int rest_multi=0;
cout<<"Enter first number :";
getline(cin,f_num);
cout<<"Enter second number :";
getline(cin,s_num);
unsigned s_f=f_num.length();
for (unsigned pass=0;pass<s_f;pass++)
{
temp=f_num[pass]-'0';
first.push_back(temp);
}
unsigned s_s=s_num.length();
for (unsigned pass=0;pass<s_s;pass++)
{
temp=s_num[pass]-'0';
second.push_back(temp);
}
vector <int> multi(first.size());
for (int i=second.size()-1;i>=0;i--)
{
for (int j=first.size()-1;j>=0;j--)
{
temp=second[i]*first[j]+rest;
multi[j]+=(temp%10);
if (multi[j]>9)
{
multi[j]%=10;
rest_multi=1;
}
rest=temp/10+rest_multi;
rest_multi=0;
}
multi.insert(multi.begin(),rest);
rest=0;
}
if (multi[0]==0)
multi.erase(multi.begin());
cout<<"Multiply is : ";
if (f_num[0]!='0' && s_num[0]!='0')
for (unsigned i=0;i<multi.size();i++)
cout<<multi[i];
else
cout<<"0";
cout<<endl;
return 0;
}