博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVALive2247 Prime Digital Roots
阅读量:6886 次
发布时间:2019-06-27

本文共 1390 字,大约阅读时间需要 4 分钟。

Regionals 2001 >> South Pacific

问题链接:。基础训练题,用C语言编写程序。

问题分析

数根是指整数的各个位的数字之和。如果其和为1位整数,则为结果;如果其和为多位整数,则再将各位数字相加,直到其和为1位数为止。

但是,这个题有点不一样,输入的数只要是素数就可以了,如果不是素数就计算其数根,数根(可以是多位整数)是素数也就可以了。必要时,需要重复计算数根,直到只剩下1位为止。

程序说明

需要说明的有以下几点:

1.输入输出需要用64位整数,所以用了long long类型;

2.函数getroot()调用层次不会太深,所以使用递归调用;

3.输出时,两项宽度均为7,中间有个空格。

参考链接:。

AC的C语言程序如下:

/* UVALive2247 Prime Digital Roots */#include 
#include
/* 试除法判断一个数是否为素数 */int isprime(long long n){ if(n == 2 || n == 3) return 1; if((n & 1) == 0 || n == 1) /* 偶数:n % 2 == 0 */ return 0; long end = sqrt(n), i; for(i=3; i<=end; i+=2) { if(n % i == 0) break; } return i > end ? 1 : 0;}long getroot(long val){ int root = 0; while(val) { root += val % 10; val /= 10; } while(root >= 10 && !isprime(root)) root = getroot(root); return root;}int main(void){ long long n; int root, okflag; while(scanf("%lld", &n) != EOF) { /* 判定结束条件 */ if(n == 0) break; /* 计算数根 */ if(isprime(n)) { root = n; okflag = 1; } else { root = getroot(n); okflag = isprime(root); } if(okflag) printf("%7lld%8d\n", n, root); else printf("%7lld none\n", n); } return 0;}

转载于:https://www.cnblogs.com/tigerisland/p/7564589.html

你可能感兴趣的文章
HTML5 API摘要
查看>>
去除滚动条的可滚动效果
查看>>
注入攻击 初见解
查看>>
JProfiler_SN_8_x.txt
查看>>
IntelliJ IDEA 社区版没有 Spring Initializr
查看>>
(C++)从本机获取WMI数据.
查看>>
【Practical API Design学习笔记】修复奥德修斯
查看>>
CentOS镜像使用帮助
查看>>
Spring AOP 实现原理
查看>>
4.5.2 libxml/tree.h file not found解决办法
查看>>
Java反射机制class类
查看>>
android使用proguard混淆生成jar包
查看>>
疯狂Activiti6.0连载(12)DMN规范概述
查看>>
3-Elasticsearch查询API
查看>>
RemotelyAnywhere安装使用指南
查看>>
PHP中利用ICONV转化字符串编码出错【DETECTED AN ILLEGAL CHARAC...
查看>>
display table 标签
查看>>
mysql 日志维护
查看>>
用 LFS 做极简高效的流媒体服务
查看>>
使用七牛云存储解决ios7.1的app部署问题 https
查看>>