如何取一个整数的前两位?

zhong_guo_zu_qiu 2011-12-22 04:49:59
例子:1234567;
前提是不知道该数有多少位,只取前两位;

结果:12;
...全文
4427 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
dyking2004 2011-12-23
  • 打赏
  • 举报
回复
其实参数x是不限于int型的,暂且当做int而已
dyking2004 2011-12-23
  • 打赏
  • 举报
回复
对于abs()的参数范围不能大于不能int的,可以
int fun(int x)
{
while(x >= 100 || x <= -100)
x=x/10;
return x;
}
pathuang68 2011-12-23
  • 打赏
  • 举报
回复

#include <iostream>
#include <cmath>
using namespace std;

int main(int argc, char** argv)
{
int first_two_digits = 0;
int number = -1234567; // 正负数皆可

if(number != 0) // number = 0没有对数
int digits = (int)floor(log(abs((double)number)) / log((double)10)) + 1;

first_two_digits = (int)(number / pow((double)10, digits - 2));

cout << first_two_digits << endl;

return 0;
}
dyking2004 2011-12-23
  • 打赏
  • 举报
回复

int fun(int x)
{
while(abs(x)>=100)
x=x/10;
return x;
}
pathuang68 2011-12-23
  • 打赏
  • 举报
回复
int n = (int)floor(log(1234567)) + 1就是1234567的位数。
说明一下:
log是10为底,C语言中的log函数是以2为底,用换底公式可以很容易写一个以10为底的取对数函数。

后面就好办了,int first_two_number = 1234567 / pow(10.0, n - 2)就可以得到12了。
reylen 2011-12-23
  • 打赏
  • 举报
回复

//适用数低于10位的
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a[50];
int d,i=0;
int j;
cout<<"输入数据:";
cin>>d;
while(d>0)
{
j=d%10;
d=d/10;
a[i]=j;
i++;
}
for(int j=0;j<i;j++) //依次输出每位
cout<<a[j]<<" ";
cout<<endl;
cout<<a[i-1]*10+a[i-2]<<endl; //输出最高两位
//cout<<a[i-1]<<" "<<a[i-2]<<endl;
return 0;
不完美小妖 2011-12-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cao_julians 的回复:]

x=abs(x);
while(x>=100)
x=x/10;
此时x就是个两位数了
[/Quote]

#include <stdlib.h>
int abs( int num );

超过整数范围就出错
支持英文数字 2011-12-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cao_julians 的回复:]

x=abs(x);
while(x>=100)
x=x/10;
此时x就是个两位数了
[/Quote]这个的确是考虑到了负数和数字的位数。但是x在程序中被修改掉了,如果在程序中可能会有很大缺点。
赵4老师 2011-12-23
  • 打赏
  • 举报
回复
#include <stdio.h>
int i;//-2147483648..2147483647 32位整数范围
char s[12];
void main() {
scanf("%d",&i);
if (-10<i && i<10) return;
sprintf(s,"%d",i);
if (i<0) printf("%.2s\n",s+1);
else printf("%.2s\n",s );
}
翻越寒武 2011-12-23
  • 打赏
  • 举报
回复
不断/10,直到值在(-100,100)
oxwuag 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cao_julians 的回复:]

x=abs(x);
while(x>=100)
x=x/10;
此时x就是个两位数了
[/Quote]

简洁,高效:)
steven30832 2011-12-22
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

int main()
{
int val;
int bit[2];
cin>>val;

int tmp = val;
while(tmp >= 100)
{
tmp /= 10;
}

bit[1] = tmp % 10;
tmp /= 10;
bit[0] = tmp;
cout<<bit[0]<<bit[1]<<endl;
return 0;
}


这个行不行?
elegant87 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wjl19890711 的回复:]

引用 5 楼 saleayas 的回复:

引用 3 楼 mingliang1212 的回复:

char arr[20];
int a;
sprintf(arr,"%d",a);
数据在arr[0];arr[1];是字符.


-123456 呢?



C/C++ code

#include <stdio.h>
#include <stdlib.h>

int……
[/Quote]
针对负数可以调用绝对值函数abs进行转换

zhozhoyu 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mingliang1212 的回复:]

char arr[20];
int a;
sprintf(arr,"%d",a);
数据在arr[0];arr[1];是字符.
[/Quote]
学习了,嘿嘿!
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mingliang1212 的回复:]
引用 12 楼 cao_julians 的回复:
x=abs(x);
while(x>=100)
x=x/10;
此时x就是个两位数了


算法50%的概率不对.
[/Quote]

看错了,哈哈,还以为 你 x/100;
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cao_julians 的回复:]
x=abs(x);
while(x>=100)
x=x/10;
此时x就是个两位数了
[/Quote]

算法50%的概率不对.
yisikaipu 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cao_julians 的回复:]x=abs(x);
while(x>=100)
x=x/10;
此时x就是个两位数了[/Quote]

cao_julians 2011-12-22
  • 打赏
  • 举报
回复
x=abs(x);
while(x>=100)
x=x/10;
此时x就是个两位数了
鲲尘千古 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 saleayas 的回复:]

引用 3 楼 mingliang1212 的回复:

char arr[20];
int a;
sprintf(arr,"%d",a);
数据在arr[0];arr[1];是字符.


-123456 呢?
[/Quote]



#include <stdio.h>
#include <stdlib.h>

int cut(int n) {
char s[20] = { 0 };
sprintf(s, "%d", n);
char a = s[0] - 48;
char b = s[1] - 48;
int ret = a * 10 + b;
return ret;
}
int main() {
int num;
printf("Input a number\n");
scanf("%d", &num);
if (num >= 0) {
int ret = cut(num);
printf("ret=%d\n", ret);
}
if (num < 0) {
num = abs(num);
int ret = -cut(num);
printf("ret= %d\n", ret);
}
return 0;
}


篾匠 2011-12-22
  • 打赏
  • 举报
回复
实际上问题在于:如何把一个整数转化为一个字符串
楼主想明白了,就写一个string itoa(int i)函数吧
加载更多回复(9)

64,682

社区成员

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

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