C++ 如何将整数拆分

fczsdx 2008-04-24 01:32:26
请问如何讲输入的整型数int 拆分成 个位 十位 百位 各自计算?!

例题:

2. 输入两个正整数m和n,(m>=1,n<=1000), 输出m~n之间所有满足各位数字的立方和等于它本身的数,要求定义并调用函数 bool is(int number)判断number的各位数字之立方和是否等于它本身。
...全文
1852 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
alwaysLonely 2008-05-06
  • 打赏
  • 举报
回复
在cmath头文件里,pow()有两个重载,一个是针对单精度浮点型的,pow(float, float),另一个是针对double的,引用的时候可能会出现不确定性问题...需要转化参数类型, 这应该就是LZ7楼说的问题...
visame 2008-05-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cyblueboy83 的回复:]
呵呵,上面都说了以方法了
感觉整形转字符串,直接取字符串 第一位,第二位,还快些
[/Quote]
嘿嘿,这个方法不错。
snprintf
stringstream
herman~~ 2008-05-03
  • 打赏
  • 举报
回复
呵呵,上面都说了以方法了
感觉整形转字符串,直接取字符串 第一位,第二位,还快些
xiaooqiang 2008-05-02
  • 打赏
  • 举报
回复

include "iostream"
using namespace std;
int a[3],m; //a[3]保存每一位,m为输入的数
for(int i=0;i<3;i++)
{
a[i]=m%10; //把得到的每一位保存到数组a中,且是从数m的最高位开始
m=m/10; //此句可得到数m去掉个位的另一个整数,再进入循环,便可得到数m的“第二高位”的数,以此类推
}
for(int i=0;i<3;i++)
{
cout<<a[i]; //输出数m的每一位数值
}
kingstarer 2008-05-02
  • 打赏
  • 举报
回复
(m % 1000) / 100 获得百位数
(m % 100) / 10 获得十位数
m % 10 获得个位数
iwong 2008-05-02
  • 打赏
  • 举报
回复
int a = 123;
int b = a/10;
int c = a%10;
int d = b + c;

本来在数学计算中a/10的值为12.3,但此时b的值为12,相当于12.3取整后的结果;
c的值当然为a/10的余数;
而d的值则等于a。

当a<10时,a%10等于a,a/10等于0。

对于位数未定的十进制数(比如一组数,三位、四位、两位的都有),各位数的立方和,可以这样:
int CubeSum(int n)
{
int sum = 0;

for (NULL; n > 0; n /= 10)
{
sum += pow(n%10, 3);
}

return sum;
}


改成while循环为:
int CubeSum(int n)
{
int sum = 0;

while(n > 0)
{
sum += pow(n%10, 3);
n /= 10;
}

return sum;
}


改为do while循环为:
int CubeSum(int n)
{
int sum = 0;

do
{
sum += pow(n%10, 3);
n /= 10;
}while(n > 0);

return sum;
}


不过要注意并非所有的while循环都能直接改为do while循环,只是这里可以而已。条件是正整数,但以上代码没有作相关判断,楼主自己搞定吧。
清钟沁桐 2008-05-02
  • 打赏
  • 举报
回复
int CubeSum(int n) { int sum = 0; for (NULL; n > 0; n /= 10) { sum += pow(n%10, 3); } return sum; }



改成while循环为:

C/C++ code

int CubeSum(int n) { int sum = 0; while(n > 0) { sum += pow(n%10, 3); n /= 10; } return sum; }

上面两个不是一样么
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
什么呀
fczsdx 2008-04-28
  • 打赏
  • 举报
回复
那请问怎么修改?!我正在学习中,很多都不会!希望高手指点
luozhi9 2008-04-24
  • 打赏
  • 举报
回复

用%与/结合使用了..
fczsdx 2008-04-24
  • 打赏
  • 举报
回复
#include <iostream>
#include <cmath>
using namespace std;
bool is(int number)
{
int a = number / 100;
int b = (number % 100) / 10;
int c = (number % 10);
if(number == (pow(a,3) + pow(b,3) + pow(c,3)))
{
return true;
}
return false;
}
int main()
{
int a,b;
cout << "please input two number:a,b(a < b)" << endl;
cin >> a >> b;
for(int i = a;i <= b;i++)
{
if(is(i))
cout << i << endl;
}
return 0;
}


运行出错

错误 1 error C2668: 'pow' : ambiguous call to overloaded function d:\c++\作业二\作业二\2.cpp 10
错误 2 error C2668: 'pow' : ambiguous call to overloaded function d:\c++\作业二\作业二\2.cpp 10
错误 3 error C2668: 'pow' : ambiguous call to overloaded function d:\c++\作业二\作业二\2.cpp 10

请问怎么解决?!头文件问题?!
fczsdx 2008-04-24
  • 打赏
  • 举报
回复
谢谢各位高手
alwaysLonely 2008-04-24
  • 打赏
  • 举报
回复
#include <iostream>
#include <cmath>

using namespace std;

//计算每位的立方和
int CountEveryDigit(int num)
{
int sumResult = 0;
while (num > 0)
{
sumResult += pow(int(num % 10), double(3));
num /= 10;
}
return sumResult;
}
//判断是否是水仙花数
bool IsFlowerNumber(int num)
{
if (num == CountEveryDigit(num))
{
return true;
}
return false;
}

int main()
{
cout << "please input the start number:";
int start = 0;
cin >> start;
cout << "please input the end number:";
int end = 0;
cin >> end;

while (start < end)
{
if (IsFlowerNumber(start))
{
cout << "flower:" << start << endl;
}
++ start;
}

system("pause");
}
WuBill 2008-04-24
  • 打赏
  • 举报
回复

#include <iostream>
#include <math.h>
#include <string>

using namespace std;

bool IsNarcissus(int &num)
{
int a0=0,a1=0,a2=0;
a2=num/100;
a1=(num%100)/10;
a0=num%10;

int newNum=0;
newNum=pow(a0,3)+pow(a1,3)+pow(a2,3);
if (num==newNum)
{
return true;
}
else
{
return false;
}
}

void main()
{
for(int i= 100; i<1000;i++)
{
if (IsNarcissus(i))
{
cout << i << "是水仙花数" <<endl;
}
else
{
// 忽略不是的
//cout << i << "不是水仙花数" << endl;
}
}
}
Jncryang 2008-04-24
  • 打赏
  • 举报
回复

#include <iostream>
#include <cmath>
using namespace std;
bool is(int number)
{
int a = number / 100;
int b = (number % 100) / 10;
int c = (number % 10);
if(number == (pow(a,3) + pow(b,3) + pow(c,3)))
{
return true;
}
return false;
}
int main()
{
int a,b;
cout << "please input two number:a,b(a < b)" << endl;
cin >> a >> b;
for(int i = a;i <= b;i++)
{
if(is(i))
cout << i << endl;
}
return 0;
}
wuyu637 2008-04-24
  • 打赏
  • 举报
回复
用位操作符^异或。。


bargio_susie 2008-04-24
  • 打赏
  • 举报
回复
.................

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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