c++的一个小问 请帮忙~~

来源:百度知道 编辑:UC知道 时间:2024/05/22 03:09:47
unsigned long left(unsigned long num, unsigned ct)//ct是要求显示的位数
{
unsigned long n=num;//为什么要定义这个n感觉没什么用
unsigned digits=1;
if(ct==0||num==0)
return 0;
while(n/=10)//此句的n难道不能用num代替?
digits++;
if(ct<digits)
{
ct=digits-ct;//此句有什么用,我觉得直接删去进入while循环就可以啊?
while(ct--)
num/=10;
return num;
}
else
return num;
}
该函数是要求显示一个整数的前几位,

unsigned long n=num;//为什么要定义这个n感觉没什么用
这里相当与用一个n来临时的接受NUM的值,因为我们不希望NUM的值改变,但是改函数中,必须需要改变一些值,用n来临时保存Num的初始值,这样能正常的改变,但是num就不会改变了,达到了我们的要求。

while(n/=10)//此句的n难道不能用num代替?
同理,主要是我们不希望num的数据改变,所以这里如果用Num他的数据就用
num /= 10等价与 num = num / 10;他的值就改变了,所以我们用n来实现这个效果,num不改变,改变n,实现我们的要求。

ct=digits-ct;//此句有什么用,我觉得直接删去进入while循环就可以啊?
ct 是要从高位显示的位数。而digits是这个数的位数。需要减才能确定却掉多少低位。例如1234,如果要显示3位,就是显示123,如果没有这句话,直接进入while会去掉3位只显示1这一位,和要求相反。所以要有这句话。

看到你有这么多疑问,我感觉回到了当年,我曾今也是这样。呵呵,同学加油哦。。不过我有一个很好的方法来帮助你,就是你觉得哪里需要什么什么,你就改成什么什么然后看效果。。我当年就是这样做的,效果不错。。推荐你也试试。。你学习编程多久了?

不能,因为n/=10表示的意思是 n = n / 10,可见n的值被改变了,你用num的话被改变了,但是下面的程序你还想使用num传进来的时候的值。

他这个算法完全正确,用一个值相同的变量来算位置,然后再通过位置来输出

这种类型的问题其实用stack栈 是最方便,也是最清晰的

代码如下:

int left(int num, int ct){
if(num==0)return 0;
int p = left(num/10,ct);
if(p<ct)cout<<num%10;
return p+1;
}

这个也是现实一个整数的前几位,不过是直接显示,并不是返回这个数

我调用了递归,也