如何快速取出整数的第一位数

twtfcu3 2005-03-13 04:41:20
如何快速取出整数的第一位数


例如
整数 45852

取出第一位 4


最后成为 5882
...全文
4865 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
twtfcu3 2005-03-14
  • 打赏
  • 举报
回复 1
大伙看看这个


我想了一个程序

#include <stream.h>

int main(){
int a=5547851;
int m;
while(a%10)
{
m = a%10;
a /= 10;
}
cout<<m<<endl;
}


这个运行要快一些
krw 2005-03-14
  • 打赏
  • 举报
回复
int main()
{
int n=45852;
n=n/10000; //amn=4;
cout<<n;

}
BoBo008 2005-03-14
  • 打赏
  • 举报
回复
支持languagec(各有所求.死于右手)的算法,
而且可以取任意位数
structme 2005-03-14
  • 打赏
  • 举报
回复
languagec(各有所求.死于右手) ( ) 信誉:100 2005-3-13 9:03:07 得分: 0



#include "stdio.h"
void main()
{
int n;
char buf[10];
sprintf(buf,"%d",n);
printf("%c\n",buf[0]);
}


------------------------------------------
取第一个就是了吧?
同意他的
tiaoci 2005-03-14
  • 打赏
  • 举报
回复
就像下面这样,只需要做一次 mod + Log(2,n)次的比较

理论上应当是比较快的,当然也有可能由于代码比较多

导致速度反而比不上上面的循环除也有可能,没有试过

#include <stdio.h>

int map[] = {0,10,100,1000,10000,
100000,1000000,10000000,100000000,
1000000000,10000000000};

int shift_num(int n)
{
int low = 0;
int high = 10;
int mid = 0;
while(low < high)
{
mid = (low + high) / 2;
if(n == map[mid]) return 0;
if(n < map[mid])
{
high = mid - 1;
}
else if(n > map[mid])
{
low = mid + 1;
}
}
if(map[low] == 0) return n;
return n % (map[low]);
}

int main()
{
printf("%d\n",shift_num(0));
printf("%d\n",shift_num(1));
printf("%d\n",shift_num(12345));
printf("%d\n",shift_num(10007600001));
}
tiaoci 2005-03-14
  • 打赏
  • 举报
回复
使用一个对照表然后用折半查找这样会快点
tiaoci 2005-03-14
  • 打赏
  • 举报
回复
上面的算法都不好,因为需要计算n位循环
cxyol 2005-03-14
  • 打赏
  • 举报
回复
//highnum.h

#ifndef _P1_H_
#define _P1_H_

#define NUM_SYS 10 //number system, decimal assumed as default.

int HighNum(int Value);

#endif //_P1_H_


//highnum.c
//Get the highest number of an integer.

#include "highnum.h"

int HighNum(int Value){
while(Value >= NUM_SYS){
Value /= NUM_SYS;
}

return Value;
}

shine51151 2005-03-14
  • 打赏
  • 举报
回复
re: tiaoci(我挑刺,我快乐)

方法倒是不错 不过我发现你的程序有两个错误:

int shift_num(int n)
{
int low = 0;
int high = 10;
int mid = 0;
while(low < high)
{
mid = (low + high) / 2;
if(n == map[mid]) return 1; /* 这里应该返回1 而不是返回0
if(n < map[mid])
{
high = mid - 1;
}
else if(n > map[mid])
{
low = mid + 1;
}
}
if(map[low] == 0) return n;
return n / (map[low]); /* 这里应该是除号/ 而不是模%
}
shine51151 2005-03-14
  • 打赏
  • 举报
回复
re: niuniu(你牛)

应该是 J = n / I;
不该是 J = n % I;

这样才会返回整数n的最高位
CloudOfFly 2005-03-14
  • 打赏
  • 举报
回复
UP
hhoo 2005-03-14
  • 打赏
  • 举报
回复
右移N-1位!
foru1971 2005-03-14
  • 打赏
  • 举报
回复
languagec(各有所求.死于右手)的这个算法最简单明了
Kvci 2005-03-14
  • 打赏
  • 举报
回复
___________________________________________________________________________________
回复人: languagec(各有所求.死于右手) ( ) 信誉:100 2005-3-13 9:03:07 得分: 0
#include "stdio.h"
void main()
{
int n;
char buf[10];
sprintf(buf,"%d",n);
printf("%c\n",buf[0]);
}
-------------------------------------------------------------------------------

niniu 2005-03-14
  • 打赏
  • 举报
回复
int GetFirstNum(int n)
{
int I,J;

I = 1;
do
{
J = n % I;
if(J < 10) return J;
else I = I * 10;
}while(1)
}
goodVcBoy 2005-03-14
  • 打赏
  • 举报
回复
如前有人所进可转为字符串,再取第一个字符。同意!
不过我下面的算法也很简单的,调试通过了的!
int main(int argc, char* argv[])
{
int data = 950943;
int m = data/10;
while(m >=10)
{
m /= 10;
}
cout<<m<<endl;
return;
}
LoveCreatesBeauty 2005-03-14
  • 打赏
  • 举报
回复
Get the highest number of an integer
http://www.cnblogs.com/lovecreatesbeauty/archive/2005/03/14/118150.html
tangtao94 2005-03-14
  • 打赏
  • 举报
回复
变成字符串,然后取头
languagec 2005-03-13
  • 打赏
  • 举报
回复
#include "stdio.h"
void main()
{
int n;
char buf[10];
sprintf(buf,"%d",n);
printf("%c\n",buf[0]);
}
zengwujun 2005-03-13
  • 打赏
  • 举报
回复
#include <iostream>
#include <math.h>
using namespace std;

int convert(int num)
{
int num1=0;
int nLength=0;

while(num>=10)
{
num1 = num1 + num%10*pow(10,nLength);
++nLength;
num = num/10;
}

return num1;
}

void main()
{
int num=45853;
cout<<convert(num)<<endl;
}
加载更多回复(5)

65,179

社区成员

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

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