[学习的脚步]初次使用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;
}

原创粉丝点击