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

求两个四位数相乘的程序解决方案

2012-04-14 
求两个四位数相乘的程序要求实现两个四位数相乘,用C++编。哪位知道的可否告知一二,或者思路或者程序。[解决

求两个四位数相乘的程序
要求实现两个四位数相乘,用C++编。哪位知道的可否告知一二,或者思路或者程序。

[解决办法]
#include <iomanip>
#include <iostream>
using namespace std;

class CNum
{
char num[8]; //9999*9999=99980001
public:
CNum(){for (int i=0; i <8; ++i) num[i]=0;}
CNum(char* str) //strlen(str) should <= 4
{
int len=strlen(str);
for (int i=1; i <=len; ++i) num[i-1]=str[len-i]- '0 ';
for (int i=len; i <8; ++i) num[i]=0;
}
void carry() //对超出10的数位完成进位,假设进位值最大为9
{
for (int i=0; i <strlen(num); ++i)
{
num[i+1]+=num[i]/10;
num[i]%=10;
}
}
CNum operator*(CNum const& other)
{
CNum tmp;
for (int i=0; i <strlen(num); ++i)
for (int j=0; j <strlen(other.num); ++j)
{
int val=num[i]*other.num[j];
tmp.num[i+j]+=val%10;
tmp.carry();
tmp.num[i+j+1]+=val/10;
tmp.carry(); // 应该可以优化,不需要重复调用这么多次!
}
return tmp;
}
friend ostream& operator < <(ostream& out, CNum const& obj)
{
for (int i=strlen(obj.num)-1; i> =0; --i) out < <(int)(obj.num[i]);
return out;
}
};

int main()
{
CNum a( "146 "), b( "232 ");
cout < < "a*b= " < <a*b < <endl;
system( "PAUSE ");
return 0;
}

热点排行