求更好的方法,谭浩强习题讨论

Dedekinds 2014-01-28 09:13:20
新人自学谭浩强C,所以求轻喷
第四章第九题:
给一个不多于5位的整数,要求:
1.求出它的位数
2.分别输出每一位数字
3.输出逆序数(123)→(321)


我觉得这个问题非常有趣,所以想听听大神们的意见,看看有没有巧妙的方法(简单的小题越容易有巧妙的方法)
我先说说我的思路:
1.这个很容易,取底数为10的对数取整就好了。
2.定义一个取尾数的函数,先求得个位数再,将原数减去个位数,除以10,再进行一次函数运算,如此类推就可以求出全部的数字
3.只要做出了(2)做(3)就简单了


楼下插入程序图。再求轻喷~


...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpcads 2014-01-29
  • 打赏
  • 举报
回复
引用 3 楼 lpcads 的回复:
void divproc(int a) //递归函数
{
	if(a!=0)
	{
		divproc(a/10);
		cout<<a%10<<endl; //显示余数
	}
	return;
}
int main( ) 
{
	//若n为0,则需打印出‘0’
	//if(n==0) 
		//cout<<'0'<<endl;
	divproc(n);
	system("pause");
	return 0;
}
这是以前学汇编时的legacy了,功能是顺序输出每一位数字,现在看看写得真烂。 特别改了下:
#include <iostream>
using namespace std;

void each_digit_recursion(int a) //递归函数
{
	if (a == 0)
		return ;

	each_digit_recursion(a / 10);
	cout << a % 10 << ' '; //显示余数
	
}

void output_each_digit(int a)
{
	cout << "each digit: ";
	if (a == 0)
		cout << '0';
	else
		each_digit_recursion(a);

}


void reverse(int a)
{
	cout << "reverse: ";
	while (true)
	{
		cout << a % 10;
		a /= 10;
		if (a == 0)
			break;
	}
	
}

int main()
{
	int n = 1234567;
	cout << "num: " << n << endl;
	output_each_digit(n);
	cout << endl;
	reverse(n);

	cout << endl;
	cout << endl;

	n = 0;
	cout << "num: " << n << endl;
	output_each_digit(n);
	cout << endl;
	reverse(n);

	cout << endl;

	system("pause");
	return 0;
}
derekrose 2014-01-29
  • 打赏
  • 举报
回复
首先要明确给出的数字的数据类型 计算机不是人
lpcads 2014-01-29
  • 打赏
  • 举报
回复
void divproc(int a) //递归函数
{
	if(a!=0)
	{
		divproc(a/10);
		cout<<a%10<<endl; //显示余数
	}
	return;
}
int main( ) 
{
	//若n为0,则需打印出‘0’
	//if(n==0) 
		//cout<<'0'<<endl;
	divproc(n);
	system("pause");
	return 0;
}
lpcads 2014-01-29
  • 打赏
  • 举报
回复
使用递归啊。
Mr. Code 2014-01-28
  • 打赏
  • 举报
回复
写的太复杂了,这个会不会简单点?
#include <stdio.h>

int main(void)
{
	int a, b = 0, dig, count = 0;

	printf("Please input a integer: ");
	scanf("%d", &a);
	
	while(a)
	{
		dig = a % 10;
		printf("%d\n", dig);  // 输出每个数字
		b = b * 10 + dig;
		a /= 10;
		count++;
	}
	printf("Digit number is %d\n", count); // 输出位数
	printf("Reverse order is %d\n", b);    // 输出反序
	getchar();
	getchar();
	return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧