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

又有一个小疑点要麻烦大家一上了,进来帮帮忙吧

2013-01-06 
又有一个小问题要麻烦大家一下了,进来帮帮忙吧。这其实是个很简单的问题,比如说,我输入一个数为6253,我最后

又有一个小问题要麻烦大家一下了,进来帮帮忙吧。
   这其实是个很简单的问题,比如说,我输入一个数为6253,我最后要把它的每个数字排序后再顺序输出,即输出2356。然后我的想法是用一个数组,去读取每一个位上的数,如让s[0]=6253-(6253/10)*10,由于是整型数的原因,它就会把最后的3给s[0]。分别取出来后再冒泡排序,这个样子就是在数组中每个数依次增大,现在就只要相加就好了。但是我相加的时候我觉得没有错,但是输出的结果总不对。下面是我的程序,各位帮忙看看,非常感谢了。
            cin>>a;
           
           while(a>0)
           {
                  b=a-(a/10)*10;
                  s[c]=b;
                  c++;
                  a=a/10;
                  if(a==0) break;
           }
           for(int i=0;i<c;i++)
           {
                for(int j=0;j<c-i;j++)
                {
                        if(s[j]>s[j+1])
                        {
                               int r=s[j];
                               s[j]=s[j+1];
                               s[j+1]=r;
                        }
                                       
                }
           }
           int x=0;
           while(x<c)
           {
                     e=e+s[x]*10+s[x+1];
                     x++;
           }
           cout<<e;
    (在冒泡排序之后对数组每个元素单独输出的时候都是对的,但是用while加起来就错了······)
    这个是只截取了主要的一部分,应该能反应出问题的,谢谢各位亲了啊!
------解决方案--------------------


我的想法就是对该数字进行 求余 求/  然后得到的放到int数组,然后对其排序就ok了!!!
[解决办法]
"如让s[0]=6253-(6253/10)*10,"
这个应该是s[0]=6253-(6253%10)*10吧?
不然取不出这几位数啊
[解决办法]
 e=e+s[x]*10+s[x+1];你这个有问题吧,比如你上面排好序后是2,3,5,6. 那么按照你这个公式,当x=0时,e=0+20+3=23,然后再下一个,x=1,e=23+30+5=60,然后x=2,e=60+50+6=116,然后x=3,e=116+60+?,也越界了啊。。
我觉得改成e=e*10+s[x];
[解决办法]
1. 如果只是要对数字排序,不需要计算的话,为什么要用整数来存呢?其实把每一个数字都当作是一个普通的字符就ok了

2. 因为数字只有0..9 10种可能,所以可以使用桶排序。也就是统计一下各个数字出现的次数 然后照着输出就行了。

例如 “输入了198373个数字!”
你就统计一下 0...9各有几个 然后挨个输出133789就ok了

热点排行