该设计有两个思路,即对数据进行处理分离出各个位数,或将数据直接作为字符串读取进来对字符串进行分割。
1、对数据进行处理
程序及运行结果如下:
程序分析:
该程序读取数据后通过除法运算分离出个位、十位…并依次存放在数组中,在通过循环将所需位数读取进来。程序基本满足要求,但计算量需要进行多次除法,且输入数据受数据类型影响较大,容易出现数据溢出。
2、将数据当成字符串处理
程序及运行结果如下:
程序分析:
该程序读取需要处理的数据时将其作为字符串读入,根据字符串长度及其他必要的数据将需要的字符串子串输出。
比较原程序,处理输入数据值长度增加,不再受数据类型影响,而受字符串长度影响,且将需要进行计算部分简化为地址的调整,优化了系统整体性能,但对于读入数据的真实数据调用较麻烦。
扩展资料
C语言对数据类型比较敏感,且数据类型的相关属性还与编译器有关,实际使用时应注意不同类型的大致范围,避免溢出。对于大数可以通过字符串、结构体或链表来表示和进行处理。
常见基本类型占用空间和数值范围对应较为复杂,可以通过以下思路进行对应:
1、通过调用sizeof(数据类型)读取数据类型占用的空间,该函数返回数值单位是字节。
2、通过字节与Bit的对应了解数据空间占据的位数。
3、通过进制转换即可了解该数据类型表达的数据大小,对于有符号数采用首位存储符号,故存储数据的位数比同类型无符号数少1。
以上可用于熟悉C语言常见数据类型的占用空间和数值范围。
#include
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{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;jprintf("%d",a[j]);
}
方法其实很简单,主要是提取确定位数整数的各个位数,主要利用除法运算和取余运算就可以实现!我来说一下整个过程吧,以后见到类似的题目就可以举一反三了!方法的重点是:(1)对某个整数对相应的最高位数为1的整数(如:三位的345对应100的整数)相除可取到最高位的整数(2)再把原数对对应的整数取余,得到出去最高位数之后的数(345%100=45)(3)再重复执行(1),(2)步骤直到取出个位的整数为止,即可求出所有位上的整数!所以,以上题目的代码是:#include