C++新手问题
如题,本人C++新手,遇到如下一题被折磨了好久适中找不到错误在哪,希望哪位仁兄能够帮忙指出来。
题目是这样的:试定义一个类NUM,实现对于给定的任意整数,求出其降序数。一个整数的降序数是指将该整数的各位数字从左到右降序排列所形成的新整数。例如,整数82319的降序数是98321.具体要求如下:
(1)私有数据成员
int n::存放一个整数。
int m:存放n的降序数。
(2)公有成员函数
NUM(int x=0):构造函数,用参数x初始化数据成员n。
void decrease():求数据成员n的降序数,并存放到数据成员m中。算法提示:将整数的各位数字依次存储到一维整型数组a中,再将数组a中的元素按降序排列,最后用数组a中的元素组合成整数。
void print():按输入/输出示例格式输出原整数及其降序数。
(3)在主程序中对该类进行测试。
输入/输出示例(带下划线部分为键盘输入)
输入一个正整数:431252
该数的降序数为:543221
这是我的程序:
#include<iostream.h>#include<math.h>class NUM{ int n,m;public: NUM(int x=0) { n=x; } void decrease() { int a[100]; int i=0; while(n>0) { n=n/10; i++; } for(int s=i;s>0;s--) { a[s-1]=n%10; n=n/10; } int k,temp,j,m=0; for(i=0;i<s-1;i++) { for(k=i,j=i+1;j<s;j++) if(a[j]>a[k]) k=j; if(k!=i) {temp=a[i];a[i]=a[k];a[k]=temp;} } for(i=0;i<s;i++) { m+=a[i]*int(pow(10,(s-1))); s--; } } void print() { cout<<"该数的降序数为:"<<m; }};void main(){ int x; cout<<"输入一个正整数:"; cin>>x; NUM s1(x); s1.decrease(); s1.print();}
for(int s=i;s>0;s--)
[解决办法]
#include<iostream.h>#include<math.h>class NUM{ int n,m;public: NUM(int x=0) { n=x; } void decrease() { int a[100]; int i=0; int bakn = n; // 备份n while(n>0) { n=n/10; i++; } n = bakn; // 恢复n的原值 for(int s=i;s>0;s--) { a[s-1]=n%10; n=n/10; } s = i; // 重新设置长度 int baks = s; // 备份s(长度) int k,temp,j; // m为成员变量,不能再定义一个局部的 for(i=0;i<s-1;i++) { for(k=i,j=i+1;j<s;j++) if(a[j]>a[k]) k=j; if(k!=i) {temp=a[i];a[i]=a[k];a[k]=temp;} } s = baks; // 恢复s的原值(长度) m = 0; // 初始化成员变量m for(i=0;i<baks;i++) // 用长度作循环变量 { m+=a[i]*int(pow(10,(s-1))); s--; } } void print() { cout<<"该数的降序数为:"<<m; }};void main(){ int x; cout<<"输入一个正整数:"; cin>>x; NUM s1(x); s1.decrease(); s1.print();}