0.5的整数倍(任何位数)
来源:互联网 发布:2017编程笔记本 编辑:程序博客网 时间:2024/05/16 13:59
判断任何一位数是否为0.5的整数倍
如果用double 则 位数大于12后就不准确了 比如 0.500000000000000000000000000000000000000000000001
用简单的扩大缩小 会导致数据不准确
因此用 字符串比较合适
但是字符串虽然让位数没了限制 但是 如果用户输入的不是数字
或者 有 + - .5 . 0. 0.500000 .0000000 .50000000 等情况都需要考虑到
下面的的代码 不长但是这些情况也都做了相应的判断
代码简单 不多说:
# include <stdio.h>/*判断任何一个数是否为0.5的整数倍 zhagoodwell*/int gainchar(char *a,int max);//输入数字 保存在a里 并返回 小数点的位置 如果没有小数点 返回0# define N 1001 //想录入X位数 包括+-号和小数点 就将其改为 X+1int main(){char B[N];int A,C;do{C=-1;A=gainchar(B,N); //A储存小数点下标 非数组下标while(B[++C]); //C=B的长度if(!A||A==C) printf("YES!\n");else if(B[A]=='5'||B[A]=='0'){while(A<C&&B[A+1]=='0')A++; printf("%s!\n",A>=C-1?"YES":"NO");}elseprintf("NO!\n");}while(C);return 0;}int gainchar(char *a,int max)//对*a输入范围(min,max),如果字符数组中存在'\n',将其改为'\0'{int c,Flag,i,j,k,S;do{printf("输入数字(1--%d位):\n",max-1);do{j=c=-1; //初始化数据 k=Flag=i=S=0;fgets(a,max,stdin);while(a[++c]);c=a[c-1]=='\n'&&c<max?c-1:c;if(c>=max-1)while(getchar()!='\n') S++; //输出的位数多于N-1时会除去多余的elsea[c]='\0'; if(S||c&&(c>max||c<1))//如果用户只输入'\n'则不提示输入错误,否则提示错误printf("输入长度有误,请重新输入!\n注:(1--%d)位:\n",max-1);}while(S||c>max||c<1);while(i<c){if((a[i]>'9'||a[i]<'0')){if(a[i]=='.'){k++; //k记录小数点个数j=i;}else if(!i&&(a[0]=='-'||a[0]=='+'));else{Flag++;break;} }i++;}if(Flag||k>1) //当小数点多于1个或者有的不是数字时printf("输入的数字不合法!");}while(Flag||k>1); return j+1; //返回下标}
附加小代码:
可能有人会说很简单,因为C语言中汉字的ASCLL码都是负的,但是 如果用户输入的是中文标点符号 那么单纯的依靠正负是不行的# include <stdio.h># define N 13int Chinese(char *a,int min,int max); //min为偶数 max一定要为奇数int main(){char a[2][N];printf("%d字节—%s\n",Chinese(a[0],2,13),a[0]);printf("%d字节—%s",Chinese(a[1],2,13),a[1]);}int Chinese(char *a,int min,int max){int c,i,j,k,p; char key[23][3]={"。","】","【","!","…","?","《","》",",","{","}","(",")","¥","‘","’",":",";","—","”","“","、","·"};printf("注:一个汉字两个字节\n");do{printf("输入(%d--%d)个汉字:多余的汉字将自动清除:\n",min/2,max/2);do{c=i=-1;fgets(a,max,stdin);while(a[++c]);c=(a[c-1]=='\n')&&c<max?c-1:c;if(c>=max-1)while(getchar()!='\n');else a[c]='\0';if(c&&(c>max||c<min))printf("输入的汉字个数不合法!请重新输入:\n");}while(c>max||c<min);while(a[++i]<0&&i<c);if(i-c)p=0;elsefor(k=j=i=0,p=1;p&&k<23;i=j=0,k++){while(i<c&&j<2)if (a[i]==key[k][j]){++i;++j;}else{i-=j-1;j=0;}if(j==2&&!(i%2))p=0;}if(!p)printf("您的输入中有的不是汉字!\n请重新");}while(!p);return c;}功能好不好试了才知道。
1 0
- 0.5的整数倍(任何位数)
- M的整数倍
- 求整数的位数
- 计算整数的位数
- 计算整数的位数
- 湖大2015 案列分析题,给出一个四位数,判断是不是11的整数倍
- 数字的任何位数的提取
- 求一个整数的位数
- 统计一个整数的位数
- 计算整数的位数3
- 判断一个整数的位数
- java求整数的位数
- 13、字体的整数倍放大
- [数字图像处理]数字图像的整数倍缩小
- 一个时间粒度整数倍的时间点
- 天梯赛 - 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字
- 整数位数
- 整数的二进制中1的位数
- 用GDB调试程序(一)
- node.js 使用nam 命令 需要添加淘宝镜像
- 为什么我们做不出项目? 盘点影响团队研发效率的几大恶习
- C# 绘图3 路径Path & OnPaint方法
- 如何去除android对话框的导航栏
- 0.5的整数倍(任何位数)
- 平稳退化(优雅降级)和渐进增强
- 机器学习之深入理解K-means、与KNN算法区别及其代码实现
- Pinpoint中agent各个端口数据发送的过程, 持续更新
- CountDownLatch 浅谈
- 线程的几个概念
- 用GDB调试程序(二)
- HDU 1495 非常可乐(BFS + 模拟)
- 1030. 完美数列(25)