又有一个小问题要麻烦大家一下了,进来帮帮忙吧。
这其实是个很简单的问题,比如说,我输入一个数为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了