| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 463 人关注过本帖
标题:关于很多位数数据输出问题。
只看楼主 加入收藏
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
结帖率:78.26%
收藏
已结贴  问题点数:20 回复次数:6 
关于很多位数数据输出问题。
求Sum=a+aa+aaa+...+aaaa(n个a)之值。其中a是一个数字,n表示a的位数,例如2+22+222+2222+22222(此时a=2,n=5) a,n由键盘输入:
#include<iostream>
using namespace std;
main()
{
    long int  a1,a2,a,i=1,sum1=0,sum2=0,n;
    printf("plese input a number:");//输入一个基本整数//
    scanf("%d",&a);
    printf("please input an int:");
    scanf("%d",&n);
    a1=a;
    while(i<=n)
    {
        printf("%ld",a1);
        sum1=a1;
        sum2+=sum1;
        a2=a1*10+a;
        a1=a2;
        i++;
    }
    printf("sum2=%ld",sum2);
}
我想问一下,当输入的n值很大的时候(比如说是20),就会出现错误,我要怎么办才能防止这样的事情发生?我应该定义数据类型是什么?要以什么样的格式输出呢?
收到的鲜花
  • hellovfp2011-06-07 10:39 送鲜花  10朵   附言:有意义的思考
搜索更多相关主题的帖子: 键盘 
2011-06-03 14:02
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
收藏
得分:10 
如果数据太多,原来的数据类型不能满足要求,这时我们可以用以下的思路:用字串数组存放数据,再对ascii码进行操作。
程序代码:
#include <string>
#include <iostream>
using namespace std;
const int ASC=48; //48是0的ascii码,49是1的ascii码…… a的ascii码是97
const int SIZE(20);         
char arr1[SIZE];
char arr2[SIZE];
int sum[SIZE];
void initia()
{
    for(int i=0;i<SIZE;i++ )
        {arr1[i]=0;arr2[i]=0;sum[i]=0;}
}

void innum(string& s1,string& s2)
{
    for(int i=s1.length()-1,k=0;i>=0;i--,k++)
        arr1[k]=s1[i];   
    for(int i=s2.length()-1,k=0;i>=0;i--,k++)
        arr2[k]=s2[i];       
}

void addop(string& s1,string s2)
{

    if (s1.length()>s2.length())
    {
        string temp(s1);
        s1=s2;
        s2=temp;
    }  
   
    for (int i=0;i<s2.length();i++)
    {
        if (i<s1.length())
        {
            sum[i]+= (s1[i]+s2[i]-2*48)%10 ;
            sum[i+1]+=(s1[i]+s2[i]-2*48)/10;           
        }   
        else
        {
            sum[i]+= (s1[i]+s2[i]-48)%10 ;
            sum[i+1]+=(s1[i]+s2[i]-48)/10;               
        }
       
    }
   
}


void print()
{
    for (int i=SIZE;i>=0;i--)
    {
        if(sum[i]!=0)
            cout << sum[i];
    }
}


int main()
{
    int len=0;   
    string str1,str2;
    cin >> str1 >> str2;
    innum(str1,str2);    

    addop(str1,str2);
    print();

    return 0;
}  

2011-06-03 16:51
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
谢谢二楼,不过对于我上面的程序来讲,要是用数组来存储数据,还要求各个位数上的数字,然后将它放进数组中再输出,这样会不会太麻烦了点~~
2011-06-04 08:06
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:10 
#include<iostream>
#include<vector>
#incldue<algorithm>
using namespace std;
int main()
{
int a,n;
int k = 0;
vector<int> cell;
for(int i = 0; i < n; ++i)
{
int s = a*(n -i) + k;
k = s / 10;
cell.push(s%10);//也可能用栈来实现
}
copy(cell.rend(),cell.rbegin(),ostream_iterator<int>(cout," "));//标准库里有这种输出的方法,rend()反向迭代器
}

这个应该会有编译错误,楼主自己调下

迭代的是人,递归的是神。
2011-06-04 20:09
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
谢谢你们~~
收到的鲜花
  • hellovfp2011-06-07 10:38 送鲜花  10朵  
2011-06-06 00:11
棉雨
Rank: 5Rank: 5
等 级:职业侠客
帖 子:174
专家分:368
注 册:2011-4-22
收藏
得分:0 
谢谢你们~~
收到的鲜花
  • hellovfp2011-06-07 10:38 送鲜花  10朵  
2011-06-06 00:11
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
方法很多,动态数组,动态字符串,链栈,链表。。。都可以实现。呵呵。
还有一个函数可变参数func(...)中用va_start,va_arg,va_end也可以实现任意数累加。

[ 本帖最后由 hellovfp 于 2011-6-7 10:56 编辑 ]

我们都在路上。。。。。
2011-06-07 10:36
快速回复:关于很多位数数据输出问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036763 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved