[学习的脚步]初次使用string
来源:互联网 发布:淘宝要求提供质检报告 编辑:程序博客网 时间:2024/05/19 06:37
/*实现两个任意位无符整数相乘*/
#include <iostream>
#include <string>
#include<cstdlib>
using namespace std;
bool IsNumber(const string &str);//判断字符串是否全由数字组成,返回true或false
int GetNumber(string &str);//把数字字符串的前0去除
int AddCharNumber(char &a,const char b);//实现两个数字字符相加,得到相加后的个位数,返回值进位
int Add(string &augend,const string addend);//把两个数字字符串值相加,把结果保存在被加数上
int Multiply(string &product,string multiplicand,const string multiplier);//实现两个数字字符串相乘,结果保存在积中,三个参数分别是积,被乘数,乘数
int main()
{
string strMultiplicand;
string strMultiplier;
string strResult;
do{
do{
cout<<"Please enter the Multiplicand:";
cin>>strMultiplicand;
}while(!IsNumber(strMultiplicand));
GetNumber(strMultiplicand);
do{
cout<<"Please enter the Multiplier:";
cin>>strMultiplier;
}while(!IsNumber(strMultiplier));
GetNumber(strMultiplier);
Multiply(strResult,strMultiplicand,strMultiplier);
cout<<"The Reslut is:"<<strResult<<endl;
}while("0"!=(strResult));
system("pause");
return 0;
}
bool IsNumber(const string &str)
{
if (0==str.size())
return false;
for (int i=0;i<str.size();i++)
if ('0'>str[i] || '9'<str[i])
return false;
return true;
}
int GetNumber(string &str)
{
while(1<str.size() && '0'==str[0])
str=str.erase(0,1);
return 0;
}
int AddCharNumber(char &a,const char b)
{
a +=b-'0';
if ('9'<a)
{
a-=10;
return 1;
}
else
return 0;
}
int Add(string &augend,const string addend)
{
int nAugend,nAddend;
int nCarry=0;
char cTemp;
//同位相加
for (nAugend=augend.size()-1,nAddend=addend.size()-1;nAugend>=0 && nAddend>=0;nAugend--,nAddend--)
{
cTemp = augend[nAugend];
nCarry=AddCharNumber(cTemp,'0'+nCarry);
nCarry+=AddCharNumber(cTemp,addend[nAddend]);
augend[nAugend]=cTemp;
}
//不同位与进位相加
if (0>nAugend)
{
if(0>nAddend)
{
if(0==nCarry)
return 0;
else
augend.insert(0,"1");
}
else
{
while(0<=nAddend)
{
cTemp = addend[nAddend];
nCarry=AddCharNumber(cTemp,'0'+nCarry);
augend.insert(0,"0");
augend[0]=cTemp;
nAddend--;
}
if(0==nCarry)
return 0;
else
augend.insert(0,"1");
}
}
else
{
while(0<=nAugend)
{
cTemp = augend[nAugend];
nCarry=AddCharNumber(cTemp,'0'+nCarry);
augend[nAugend]=cTemp;
nAugend--;
}
if(0==nCarry)
return 0;
else
augend.insert(0,"1");
}
return 0;
}
int Multiply(string &product,string multiplicand,const string multiplier)
{
product="0";//积初始化为0
if ("0"==multiplicand)//被乘数为0,结果为0
return 0;
for (int i=(multiplier.size()-1);i>=0;i--)
{
//乘数的位数上是多少就把中间积与被乘数中间值相加多少次
switch(multiplier[i])
{
case '9':Add(product,multiplicand);
case '8':Add(product,multiplicand);
case '7':Add(product,multiplicand);
case '6':Add(product,multiplicand);
case '5':Add(product,multiplicand);
case '4':Add(product,multiplicand);
case '3':Add(product,multiplicand);
case '2':Add(product,multiplicand);
case '1':Add(product,multiplicand);
default:break;
}
//被乘数中间值移位
multiplicand.append("0");
}
return 0;
}
- [学习的脚步]初次使用string
- 学习编程的脚步
- MarkDown的初次学习使用。
- Linux学习笔记:shell的初次使用
- 初次学习使用CSDN
- 小菜鸟,记录学习的脚步。
- 我必须加快学习的脚步
- 跟随大神的脚步学习之开篇
- 跟从别人的脚步,学习machine-learning
- Ajax的初次使用
- birt的初次使用
- ajax的初次使用
- Git的初次使用
- TexturePacker的初次使用
- Lucene的初次使用
- GitHub的初次使用
- Maven的初次使用
- MYSQL的初次使用
- VxWorks操作系统复位实战(二)[by Progsoft]
- 使用sprintf及sscanf函数进行CString与CTime之间的转换
- 用atl写的缩略图组件
- c#常用函数方法及sql时间
- Tapestry4改进运行效率的实现方法
- [学习的脚步]初次使用string
- 用AXIS开发WEBSERVICE
- 丁磊:那时候我们除了会写软件 什么也不会做
- 想写点什么!~11.28
- 使用struts+spring+hibernate 组装web应用
- AJAX技术初探
- Struts+Spring+Hibernate 的两种组合配置方法
- web文本挖掘
- 文本挖掘