C语言,键盘输入一个2位以上的任意数,输出这个数的第m位开始,到第n位结束的数。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,键盘输入一个2位以上的任意数,输出这个数的第m位开始,到第n位结束的数。相关的知识,希望对你有一定的参考价值。

C语言,键盘输入一个2位以上的任意数,输出这个数的第m位开始,到第n位结束的数。(n>m),例如:12345,m=2,n=4时,输出234

该设计有两个思路,即对数据进行处理分离出各个位数,或将数据直接作为字符串读取进来对字符串进行分割。

1、对数据进行处理

程序及运行结果如下:

程序分析:

该程序读取数据后通过除法运算分离出个位、十位…并依次存放在数组中,在通过循环将所需位数读取进来。程序基本满足要求,但计算量需要进行多次除法,且输入数据受数据类型影响较大,容易出现数据溢出。

2、将数据当成字符串处理

程序及运行结果如下:

程序分析:

该程序读取需要处理的数据时将其作为字符串读入,根据字符串长度及其他必要的数据将需要的字符串子串输出。

比较原程序,处理输入数据值长度增加,不再受数据类型影响,而受字符串长度影响,且将需要进行计算部分简化为地址的调整,优化了系统整体性能,但对于读入数据的真实数据调用较麻烦。

扩展资料

C语言对数据类型比较敏感,且数据类型的相关属性还与编译器有关,实际使用时应注意不同类型的大致范围,避免溢出。对于大数可以通过字符串、结构体或链表来表示和进行处理。

常见基本类型占用空间和数值范围对应较为复杂,可以通过以下思路进行对应:

1、通过调用sizeof(数据类型)读取数据类型占用的空间,该函数返回数值单位是字节。

2、通过字节与Bit的对应了解数据空间占据的位数。

3、通过进制转换即可了解该数据类型表达的数据大小,对于有符号数采用首位存储符号,故存储数据的位数比同类型无符号数少1。

以上可用于熟悉C语言常见数据类型的占用空间和数值范围。

参考技术A #include <stdio.h>
void main()
int i=0,j,k,m,n,t,a[100];
scanf("%d,m=%d,n=%d",&k,&m,&n);
while(k)
a[i]=k%10;k/=10;i++;
for(j=0;j<i/2;j++)
t=a[j];a[j]=a[i-j-1];a[i-j-1]=t;
if(m<1||m>n||n>i)
printf("Input error!");
else
for(j=m-1;j<n;j++)
printf("%d",a[j]);

参考技术B 方法其实很简单,主要是提取确定位数整数的各个位数,主要利用除法运算和取余运算就可以实现!我来说一下整个过程吧,以后见到类似的题目就可以举一反三了!方法的重点是:(1)对某个整数对相应的最高位数为1的整数(如:三位的345对应100的整数)相除可取到最高位的整数(2)再把原数对对应的整数取余,得到出去最高位数之后的数(345%100=45)(3)再重复执行(1),(2)步骤直到取出个位的整数为止,即可求出所有位上的整数!所以,以上题目的代码是:#include<iostream.h>int main() int a ; cout<<"请输入一个两位数的整数"<<endl; /*一下循环作用是:检验输入的整数是否为两位数, 如果是则退出,不是则提示并继续输入,直到输入 的数是两位数的整数为止! */ while(cin>>a) if(a<100 && a>=10) break; cout<<"输入非法!请输入两位数的整数!"<<endl; cout<<a<<"的十位数是:"<<a/10<<" ,个位数是:"<<a%10<<endl; return 0;在VC6.0里验证如下:

c语言高手急救:从键盘输入长整数n,将其从个位开始,每三位数字一组用逗号间隔输出。

例如,如果输入最大的长整数:2147483647
则输出:2,147,483,647

比楼上的优点是可分解负整数。
#include<stdio.h>
int main()
long n;
int i=0,j=0,f=0;
char x[60];
printf("n=");
scanf("%ld",&n);
if(n<0) f=1;n=-n;
for(;n!=0;n/=10)
x[i++]='0'+n%10;j++;
if(j==3)
j=0;
x[i++]=',';


if(f) printf("-");
for(i-=1+(x[i-1]==',');i>=0;i--)
printf("%c",x[i]);
printf("\n");
参考技术A 看看这个能不能满足你的要求,不过只能显示正整数

#include <stdio.h>

void print(unsigned int a);

int main()



unsigned int m;
scanf("%u", &m);
print(m);

return 0;



void print(unsigned int a)

const unsigned long max_num = 30;
char buff[30] = '\0'; //定义一个缓冲区,大小为 max_num 字节。
char *p = buff + max_num - 1; /*将p指向buff的最后一个字符*/

int i = 0;
do

*--p = a % 10 + '0';
a /= 10;
i++;
if (i == 3)

i = 0;
if (a != 0)
*--p = ',';

while(a != 0);

p = buff;
while (*p == '\0') p++; /* 查找字符串第一个不为'\0'的地址。不用担心找不到,因为buff中至少有一个字符'0' */
printf("%s", p);
return;

以上是关于C语言,键盘输入一个2位以上的任意数,输出这个数的第m位开始,到第n位结束的数。的主要内容,如果未能解决你的问题,请参考以下文章

c语言程序设计. 由键盘输入两个整数,分别计算这两个数的和、差、积、商,并输出结果。

c语言简单求和,编写程序:输入两个数,求两个数的和

C语言编程题 从100-999之间输入1个数,如果这个数的个位十位百位之和大于10,则输出这个数,否则输出10

c语言题从键盘输入100到999之间的数,将该数的个十百位数字相加的和输出

c语言中怎样让一个有10个元素的数组输出5个元素后换行后再输出另外五个函数

pascal 由键盘上输入任意n个一位数数输出它的全排列