荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huhaiming (一生只爱她), 信区: Program
标  题: [合集]c指教
发信站: 荔园晨风BBS站 (Fri Apr 30 18:30:16 2004), 站内信件

victy (victor) 于Fri Feb 27 17:12:54 2004提到:

用c编程序
给定的大于10的整数
怎么样取它的除了最高位的数字

例:取5932的低位得到932

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.66]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.66]

jango (姜戈,理想高于一切) 于Fri Feb 27 17:19:44 2004提到:

这个简单。

#include<stdio.h>
void main()
{
  long a,b;

  scanf("%ld",&a);
  b=1;
  while(b<a)
  {
    b=b*10;
  }
  b=b/10;
  a=a%b;
  printf("%ld\n",a);

}


jango (姜戈,理想高于一切) 于Fri Feb 27 17:29:49 2004提到:

当然,
你还可以用math.h里面的
log10()函数,省掉那个循环的时间。

当你使用 floor(log10(a))+1的时候,
得到的就是这个整数a的位数。
再用一个pow(),来实现b的取值

虽然对这题来说没什么必要。
但对于那些大型整数来说,还是有用的。
比如算阶乘的位数。


tec (TO BE A BETTER MAN!) 于Fri Feb 27 20:11:19 2004提到:

还可以先将它转换为string,首指针后移一格,再转回int



jango (姜戈,理想高于一切) 于Fri Feb 27 20:42:15 2004提到:

那你还不如直接用
scanf("%1d",&a)

每次scan一个进来。
print一个出去。

把第一个丢掉就行了。
不用转换,哈哈。



zqw (zqw) 于Fri Feb 27 20:48:37 2004提到:

#include <stdio.h>

void main(void)
{
        long a;
        long b;
        int i=1;
        scanf("%d",&a);
        b = a;
        while (b >= 10)
        {
                b /= 10;
                i *= 10;
        }
        a = a - b*i;
        printf("%d",a);
}



posidone (海王波赛冬) 于Fri Feb 27 20:59:32 2004提到:

这个方法理论上看似可行,
但是,实际上没有可操作性。

对于单个的数据输入,
你可以用
if(scanf("%1d",&a)==EOF)break;
但是,如果要输入一组数据呢?
你根据什么来判断呢?

比如,输入12和34,
你如何让电脑知道你输入的不是1234?

所以你还是要用char
scanf("%c")判断它是否等于回车。
甚至都不需要把它转成int
因为这题不涉及数字运算。
何必把它转成int呢?
你直接用char输出就行了嘛。

[ 在 jango (姜戈,理想高于一切) 的大作中提到: 】


posidone (海王波赛冬) 于Fri Feb 27 21:06:34 2004提到:

直接用char
一个变量搞定。

#include<stdio.h>
void main()
{
  char c;

  while(scanf("%c",&c)!=EOF)    //最高位在此已经被屏蔽掉了。
  {

     while(1)
     {
        scanf("%c",&c);

        if(c=='\n') break;
        printf("%c",c);

     }
     printf("\n");
  }

}


jango (姜戈,理想高于一切) 于Fri Feb 27 21:11:03 2004提到:

高人!!!
强!!!



tec (TO BE A BETTER MAN!) 于Fri Feb 27 21:34:39 2004提到:

别人没有说要从console输入啊,只是数值转换而已

这样就行了

int cut_highest_digit(int i) // i必须大于10
{
        char str[11];
        sprintf(str, "%d", i)
        return atoi(str+1);
}


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店