POJ1519数字根 问题

本文介绍了一种计算数字根的方法,适用于任意长度的正整数,包括使用字符数组处理大数的情况。通过递归调用函数实现对数字的多次求和直至得到个位数。同时,提供了对大数的字符形式输入处理方式,确保算法适用于不同规模的数据处理需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个正整数的数字根是指该数字各位数字之和,如果和是一个个位数,那么这个数字就是它的数字根,如果和是个两位或多于两位的数字,那么就继续求和直到得到个位数。<br />例如:数字24,把2和4相加,得到6,那么6就是24的数字根;又比如数字39,把数字3和9相加,得到12,因为12时是两位数,所以继续把1和2相加,得到3,于是3就是39的数字根
#include<iostream>
using namespace std;
int temp;
int function(int num)
{
	while (num!=0)
	{
		temp +=num%10;
		num /=10;
	}
	if (temp>=10)
	{
		num=temp;
		temp=0;
		function(num);
	}
	return temp;
}
int main(int argc,char *argv[])
{
	int num;
	while (cin>>num)
	{
		temp=0;
		temp=function(num);
		cout<<temp<<endl;
	}
	return 0;
}


如果数字有2000位的话,可以用字符的形式来表示:

#include<iostream>
using namespace std;
int temp;
char num[2001];
int function(int num)
{
	while (num!=0)
	{
		temp +=num%10;
		num /=10;
	}
	if (temp>=10)
	{
		num=temp;
		temp=0;
		function(num);
	}
	return temp;
}
int main(int argc,char *argv[])
{
	int length,i,j;
	while (cin>>num&&num[0]!='0')
	{
		temp=0;
		i=0;
		length=strlen(num);
		while (i<length)
		{
			temp =function(num[i]-'0');
			i++;
		}

		cout<<temp<<endl;
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值