2009的2009次方,所得数各位数字求和,结果继续求和,直到剩下一位数字,需要几次求和运算?? 收藏
迅雷2010招聘海报上的题目.
#include <iostream>
#include <vector>
using namespace std;
const int N = 7000;
void smooth(vector<int>& vr){
int i = vr.size();
for (int m = i-1;m>0;m--)
{
if(vr[m]>=10){
vr[m-1] += vr[m]/10;
vr[m] = vr[m]%10;
}
}
}
void doplus(vector<int>vr1,vector<int>&vr2,int i){
vector<int>::iterator it;
int n =vr1.size();
for (int m =n-1;m>=0;m--)
{
vr2[n--]= vr1[m] * i;//从最后一位
}
smooth(vr2);
}
void add(vector<int>& vr1,vector<int>& vr2,vector<int>& vr3){
int i = vr1.size();
for (int m=i-1;m>=0;m--)
vr3[m]=vr1[m]; //vr3后3位为0
int n= vr3.size()-1;
int p =vr2.size()-1;
for (;p>=0;p--)
{
vr3[n--] +=vr2[p];
}
smooth(vr3);
}
void update(vector<int>&vr1,vector<int>& vr2){
int i = vr2.size();
int a=N-1;
for (int m=i-1;m>=0;m--)
{
vr1[a--] = vr2[m];
}
}
void plus2009(vector<int>& vector1){
vector<int>::iterator it;
int i =0;
for(it = vector1.begin();*it == 0 && it !=vector1.end();++it)
i++;
int bit = N - i;
vector<int>vector2(bit+1);//赋值
vector<int>vector3(bit+1);//赋值
vector<int>vector4(bit);//vector1有效数字 的副本
vector<int>::iterator it2;
for (it2 =vector4.begin();it!=vector1.end();++it2,++it)
{
*it2 = *it;
}
doplus(vector4,vector2,2);// ×2 放入新数组
doplus(vector4,vector3,9);//X9放入新数组
int m= vector2.size();
vector<int>vr3(m+3);
add(vector2,vector3,vr3);
update(vector1,vr3);//赋值到原数组
}
int main(){
vector<int>vector1(N);
vector1[N-1]=9;
vector1[N-2]=0;
vector1[N-3]=0;
vector1[N-4]=2;
cout<<"2009的"<<"2009次方: "<<endl;
for(int i = 1;i<=2008;i++) //2009次方
plus2009(vector1);
vector<int>::iterator it;
bool z=0;
int number =0;
int sum = 0;//计算各个位数之和
int tamp=0;//统计数字玩,与题目无关
vector<int>vectornumber(10);//统计数字玩,与题目无关
for (it = vector1.begin();it!=vector1.end();++it){
if(*it !=0)
z =1;
if(z){
number++;
cout<<*it;
tamp = *it;
vectornumber[tamp]++;
sum += *it;
}
}
cout<<endl;
cout<<"这个数的位数为 : "<<number;
cout<<"各个数字累加为: "<<sum<<endl;
int step = 1;//已经加了一步
while(sum > 10){
int sum2=0;
while(sum != 0){
sum2 += sum%10;
sum = sum/10;
}
sum = sum2;
step++;
}
cout<<"共需要加 "<<step<<"步"<<endl;
cout<<"最后数字为"<<sum<<endl;
vector<int>::iterator itnum;//统计数字玩,与题目无关
int fig=0;//统计数字玩,与题目无关
for (itnum = vectornumber.begin();itnum!=vectornumber.end();++itnum)
{
cout<<fig++<<" :"<<*itnum<<endl;
}
getchar();
}
代码写的丑,本来想再整理下,又有其他事情就放下啦,将就吧 。其实把数字颠倒存储代码写的会更简单些,更好看些。以后慢慢修改吧 其实还可以提炼成更通用的代码 ,不仅仅是2009次方,还可以是任意次方,或者就是任意大的数相乘。既然有任意大数相乘算法了,我也就更懒得修改啦。
本来以为会有数学规律的,不需要暴力解答。但是我运行出来结果发现,竟然不符合我使用数学方法的归纳猜想。郁闷。数学解法我就没有继续探究啦。
2009的2009次方是个有着6636位数的数字,这些数字加起来和为30119,30119 再加为14,再加为5.
那么答案为3次
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/houxudongdongxu/archive/2009/10/15/4676646.aspx
分享到:
相关推荐
5. "水仙花数"的输出:对于n位的水仙花数,需要计算每位数字的n次方和,判断是否等于原始数字。 6. 回文数的寻找:定义一个函数`bool huiwen(int n)`,检查数字是否为回文,然后在指定范围内查找满足条件的数。 7....
4. **二进制到十进制转换**:可以使用位权相加的方法,即将二进制数的每一位乘以其对应的权重(2的n次方,n为该位的位置,从右向左计算),然后将所有结果相加得到十进制数。 5. **编程实现**:在ASM.asm文件中,很...
可以使用模运算和除法来获取数字的每一位,然后进行相应的计算。 2. **数字逆序输出**:通过将数字转换为字符串,然后反向遍历字符串,可以得到逆序的数字。也可以用数学方法逐位处理。 3. **求整数位数并逆序输出...
本教程将聚焦于如何利用Visual Studio 2013这一强大的集成开发环境(IDE)来编写一个计算从2的0次方到2的63次方的循环求和程序。在Visual Studio 2013中,C语言程序的开发流程包括创建项目、编写代码、编译和调试。...
这些题目来自于第四届“蓝桥杯”全国软件专业人才设计与创业大赛的C/C++高职高专组竞赛,涵盖了一系列的编程与数学问题。以下是各题目的解析: 1. **猜年龄**:根据题目描述,美国数学家维纳年龄的立方是4位数,4...
- **十六进制转二进制和十进制**:每一位十六进制数对应四位二进制数。十进制转换则采用十进制的加权求和方法。 - **十进制转二进制和十六进制**:二进制转十进制利用2的幂次方求和方式;十六进制转十进制类似,使用...
15. **数的表示**:16题涉及两位数的表示,交换十位和个位数字后,数值会变。 16. **倒数与相反数**:17题中,互为相反数相加为0,互为倒数相乘为1。 17. **数轴距离**:18题是数轴上的两点距离问题。 18. **温差...
标题中的“有理数混合运算习题PPT学习教案”表明了这是一份关于有理数混合运算的教学材料,主要用于帮助学生理解和掌握有理数的运算规则和技巧。描述中的内容与标题一致,进一步确认了这是一个针对有理数运算的学习...
在循环内部,我们需要对数字的每一位进行提取并计算立方和。Python中可以使用整除和取余操作来获取数字的各位。`//` 运算符用于整除,`%` 运算符用于取余。例如,`num // 100` 得到百位数,`num % 100 // 10` 得到十...
例如,将一个八进制数(437.25)8转换为十进制数(287.328125)10,需要将每个位的数字乘以相应的8的幂次再求和。同样,十六进制数(3BE.C4)16转换为十进制数(958.765625)10,是将每个位的数字乘以16的相应幂次后再求和。...
《数字电子技术基础》课程涉及了数字系统的基础知识,包括数制转换、编码和逻辑运算等。以下是这些习题中涉及的知识点的详细说明: 1. **数制转换**: - **十进制到二进制、八进制、十六进制**:十进制数可以通过...
对于二进制数转换成十进制数,可以将每个位上的数字与其对应的2的幂次相乘后求和。二进制转换为十六进制数则更加直接,因为二进制与十六进制都是2的幂次方的数制,可以通过将二进制数每四位一组转换成相应的十六进制...
描述中提到的“计算整数各位数字之和”是另一个相关的问题,它要求将一个整数的每一位数字相加,得到的结果称为数字之和。例如,如果输入的整数是123,那么它的数字之和就是1 + 2 + 3 = 6。这个任务经常在处理数字...
例如,题目中的多位数构造规则是:每位数字是由前一位数字乘以2得到,如果积是一位数则直接写在下一位,如果积是两位数则取个位数。这种问题锻炼学生的逻辑推理能力和模式识别能力。 2. **等差数列和等比数列**:...
在探讨如何用C语言编程实现输出100到999之间的水仙花数之前,我们首先需要理解几个核心概念:水仙花数、循环结构、条件判断以及数学运算。 ### 水仙花数的概念 水仙花数(Narcissistic number),又称为自恋数或...
二进制数到十进制的转换涉及将每一位二进制数的值乘以2的相应次方然后求和。反之,十进制转换为二进制则通常通过不断地除以2并取余数的方式来完成。 二进制数中还有两个重要的概念是LSB(Least Significant Bit,...
- **位运算**:通过除法和模运算获取每一位数字。 - **条件判断**:使用 `if` 语句检查是否满足水仙花数的条件。 ### 知识点六:算法与排序 虽然第六题的部分代码缺失,但可以推测此题可能涉及对一组数据进行某种...
【数字电子技术基础】是电子工程领域的重要基础知识,主要涵盖了数字信号、数字电路的基本概念、逻辑代数理论以及数字系统的分析和设计方法。本章的学习目标主要包括理解和掌握以下几个核心知识点: 1. **二进制与...
4. **倒数**:一个数的倒数是与之相乘等于1的数,1和-1的倒数分别是1和-1。 5. **绝对值**:任何数的绝对值是非负的,例如-12的绝对值是12。 6. **有理数的大小关系**:根据数轴上的位置,可以判断数的大小,例如a...