永发信息网

用C++或者C编写一个程序

答案:6  悬赏:80  手机版
解决时间 2021-05-07 01:18

输入几个相当大的数字,当输入为0的时候就将这几个大的数字的和输出。

1、这几个数字是非常大的,什么long int之类的是绝对装不下的

2、其次这几个数字的长度是一样的

麻烦高手写一个。我写出来的可以通过DEV-C++,但是在OJ上面不能通过。谁写的过了悬赏分不是问题。

最佳答案

楼主为何非要考虑整型呢……用char不型照样可以输出数字,把char大小设成1000,这样就能存上1000位的数了


#include<stdio.h>
int main()
{
 int i = 0;
 char word,a[1000];
 printf("请输入某数(遇到0退出):\n");
 scanf("%c",&word);
 while(word != '0')
 {
  a[i] = word;
  ++i;
  scanf("%c",&word);
 }
 a[i] = '\0';
 printf("%s\n",a);
 return 0;
}


全部回答

用一个vector<char>储存一行数字

再用vector< vector<char> >储存所有数字

#include <iostream> #include <vector> #include <cassert> using namespace std; //测试用define宏 #define TEST1 typedef vector<char> NUM;//数字的类型,每个数字都一个NUM //检测是否遇到了0; bool MeetZero(istream &is) {  if( '0'== is.peek() )   return 1;  else return 0; } //从输入流is中读出一个数,作为char型的vector存到num中,此时num没有经过反序 int ReadNum(istream &is,NUM &num) {  char tem;  while( (tem=is.peek())!=' ' && tem!='\n' && tem!='\t')   num.push_back(is.get());  while( (tem=is.peek())==' ' || tem=='\n' || tem=='\t')   is.get();  return 1; } int WriteNum(ostream &os,const NUM &num) {  for(int i=num.size()-1,k=0;i>=k;i--)   os << num[i];  return 1; } //在数字num的第weishu位上进位,进位制为jinwei,要求jinwei<10,但weishu可以超过num最大位 int JinWei(NUM &num,int weishu,int jinwei) {  assert(jinwei<10);  if( weishu>(int)num.size())  {   for(int i=num.size();i<weishu-1;i++)//多出来的空位上补0    num.push_back('0');   num.push_back( char(jinwei+0x30) );//在num[weishu-1]上写上jinwei  }  else  {   num[weishu-1]+=jinwei;   if(num[weishu-1]>0x39)   {    num[weishu-1]-=10;    JinWei(num,weishu+1,1);   }  }  return 1; }

int main(int argc,char *argv[]) {  vector<NUM> nums;  while(!MeetZero(cin))  {   NUM num1;   ReadNum(cin,num1);   NUM num2(num1.size());   for(int i=0,k=num1.size();i<k;i++)    num2[i]=num1[k-i-1];

  nums.push_back(num2);  }  //测试数字是否正确读入 #ifdef TEST  for(int i=0,k=nums.size();i<k;i++)  {   WriteNum(cout,nums[i]);   cout << endl;  } #endif  //获取所有数字的最长位数  unsigned int max_lenth=0;  for(int i=0,k=nums.size();i<k;i++)  {   if(max_lenth<nums[i].size()) max_lenth=nums[i].size();  }  //新建一个数字,作为它们的和  NUM sum(max_lenth,'0');  for(unsigned int i=0;i<max_lenth;i++)//代表当前加到第i位  {   //小循环里是第i位上数字的相加   for(unsigned int ii=0,ik=nums.size();ii<ik;ii++)//代表当前加上第ii个数字   {    if(nums[ii].size()>i ) //第ii个数字上有第i位才相加,否则跳出循环加下一个数字    {    sum[i]+=nums[ii][i]-0x30;    if(sum[i]>0x39)//产生进位    {    sum[i]-=10;//两个一位数字相加,若进位,其进位一定是1    JinWei(sum,i+2,1);//在sum[i+1]上进位    }    }

  }  } #ifdef TEST  //测试 99721 在第3位进3的结果  JinWei(nums[0],3,3);  WriteNum(cout,nums[0]); #endif  WriteNum(cout,sum);    return 0; }

用C++的std::string,或者std:stringstream,这2个足以满足你的要求,也可以std:vector.
简单的大数问题,几人你在OJ上做题,那还是自己上网上找些模版练练吧,注意边界,很简单!
我有问题,我用DEVCPP看了long int 4个字节long long int 8个字节,那么long long int 装的下吗

c++代码 希望满足lz的要求:

##include <iostream> #include <cmath> #include <cstring> using namespace std;

void main() {  cout << "输入大数字的个数: ";  int n;  cin >> n;

 cout << "输入大数字的位数: ";  int length;  cin >> length;

 cout << "enter the number: ";  char **s = new char*[n];  for (int i = 0; i < n; i++)  {   s[i] = new char[length];   cin >> s[i];

 }

 int *result = new int[length + 1];  int c = 0;  int b = 0;  for (int k = length - 1; k >= 0; k--)  {   int sum = 0;   for (int j = 0; j < n; j++)   {    sum += (int)(s[j][k]) - 48;   }    sum += c;   c = sum / 10;   result[length - k - 1] = (sum - c * 10);     }  result[length] = c;

 cout << "cin>> (print'0' to cout: )";  int d;  cin >> d;  if (d == 0)  {  cout << "the result is ";  if (result[length] != 0)   cout << result[length];

 for (int m = length - 1; m >= 0; m--)   cout << result[m];

 cout << endl;  }  else   exit(0); }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
AU注册的帐号的时候怎么分男和女?
流血一周不死的是什么
石埠奶场农贸市场这个地址在什么地方,我要处
最近很烦~~
谁给我介绍几本电子书(玄幻、仙侠)要提供网站
在淘宝卖什么好?
罗志祥10月17日几点在宁波哪个下飞机
地球质量多少?
怎样会使脸变小呢
加工中心批量生产过程中 工件装反有什么好的
剑圣和战神谁PK厉害
寄鞋带方式
利民食杂在哪里啊,我有事要去这个地方
甘肃09年成人高考成绩
谁帮我点亮烽火战国图标
推荐资讯
别人添加我为好友时想把之前设置问题取消怎么
墨竹现在值多少钱
请问。三星s3930c可不可以下载电字书。
武汉麻将怎样暗杠,杠的牌才能不明牌
关于5700手机问题
谁给个SQL的小区物业管理~
什么车适合家用!
有什么是永远的?
QQ炫舞随机任务取消了一个有什么后果??
做什么事可以打发无聊啊?
盛大泡泡堂能用短信充金币么?
好万年陶瓷在什么地方啊,我要过去处理事情
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?