0.5的整数倍

Time Limit: 1000MS   Memory Limit: 100K
Total Submissions: 1   Accepted: 1

Description

输入一个实数 判断是否为0.5的整数倍

Input

输入一个整数N(1<=N<=1000) 表示输入N个数

第二行开始 输入个数 算上小数点最多1000位 共N行

Output

如果此数为0.5的整数倍则输出Yes 否则输出No

Sample Input

3

0.500000000000000000000000000000000000000000000001
-12.50000000000000000000000000000000000000000

+123456879897987789987.0

Sample Output

No
Yes
Yes

个人理解:

用简单的扩大缩小 会导致数据不准确

因此用 字符串比较合适

但是字符串虽然让位数没了限制 但是 如果用户输入的不是数字

或者 有 +      -      .5       .       0.        0.500000          .0000000      .50000000    等情况都需要考虑到

代码C语言:

# include <stdio.h>
int gainchar(char *a,int max);//对*a输入范围[1,max]返回 小数点的位置 如果没有小数点 返回0
int GET(char S[],int A);//S为字符串 A为小数点的位置 是0.5整数倍返回1 否则返回0
# define N 1001   //录入N位数
char A[N+1];
int main()
{int n,F;char B[][4]={"No","Yes"};scanf("%d",&n);while(n--){F=GET(A,gainchar(A,N));puts(B[F]);}return 0;
}
int GET(char S[],int A)//S为字符串 A为小数点的位置 是0.5整数倍返回1 否则返回0
{int C=-1;while(S[++C]);  //C=B的长度if(!A||A==C)return 1;//如果小数点没有或者在最后的位置if(S[A]=='5'||S[A]=='0')//如果小数点后面是'5'或者'0'{while(A<C&&S[A+1]=='0')A++;//继续比较是不是'0'return A>=C-1;//如果比较最后A>=C-1则比较完毕都符合题意}return 0;//如果上述都不行 返回0
}
int gainchar(char *a,int max)//对*a输入范围[1,max]
{int B,c,Flag,i,j,k,S;do{j=i=-1;k=Flag=i=0;do{a[max]=B=c=0;while((a[c++]=getchar())!='\n'&&c<max);if(a[c-1]!='\n')while(getchar()!='\n'&&++B);else a[--c]=0;if(B||c&&c<1)printf("您录入的字符串长度:%d字节\n只录入(1--%d)个字节!\n",B+c,max);}while(B||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;}}}if(Flag||k>1) printf("输入的数字不合法!");  //当小数点多于1个或者有的不是数字时}while(Flag||k>1);return j+1;    //返回下标
}

下面的的代码 是完善输入输出的:

# include <stdio.h>
/*判断任何一个数是否为0.5的整数倍  zhagoodwell*/
int gainchar(char *a,int max);//输入数字 保存在a里 并返回 小数点的位置 如果没有小数点 返回0
# define N 1001   //想录入X位数 包括+-号和小数点  就将其改为 X+1
int 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");
}
else
printf("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时会除去多余的
else
a[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 13
int 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;
}
功能好不好试了才知道。

编程判断一个实数(任何位数)是否为0.5的整数倍相关推荐

  1. 试编程判断输入的正整数是否既是5又是7的整数倍,若是输出“YES“,否则输出“NO“。

    #include <stdio.h> void main() {int n;printf("请输入一个正整数:\n");scanf("%d",&am ...

  2. 试编程判断输入的正整数是否既是5又是7的整数倍,若是输出“yes”,否则输出“no”。

    package Experiment.Java.test4;import java.util.Scanner;public class test03 {public static void main( ...

  3. java整除_java编程判断一个整数能否被9整除

    展开全部 1.可以使用下面这个表达式来进行计算62616964757a686964616fe4b893e5b19e31333431333962 if(n%9==0){ System.out.print ...

  4. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...

    Python编程判断一个正整数是否为素数的方法,python素数 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string impor ...

  5. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法...

    本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string import math #判断是否素数的函数 def isPrime(n): ...

  6. python输入一个自然数、判断是否为素数_Python编程判断一个正整数是否为素数的示例代码分享...

    这篇文章主要介绍了Python编程判断一个正整数是否为素数的方法,涉及Python数学运算相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供 ...

  7. python输入一个自然数、判断是否为素数_Python编程判断一个正整数是否为素数的方法...

    本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string import math #判断是否素数的函数 def isPrime(n): ...

  8. Python课堂笔记之判断一个数组中是否含有数字0

    判断一个数组中是否含有数字0的3种方法: lst1=[1,3,4] lst2=[0,6,7] lst3=[[1,3,4],[0,6,7]]#1.如果有0,True for i in range(2): ...

  9. C语言编译能否被七整除,C++编程判断一个整数能否被3、5、7整除的几种方法

    今天开始试着自己找一些试题做,遇到这样一道题: 编程实现输入一个整数,判断其能否被3.5.7整除,并输出以下信息之一: (1)能同时被3.5.7整除: (2)能被其中两个数(要指出哪两个)整除: (3 ...

最新文章

  1. UITabBarController
  2. 【Demo】创建固定资产Bapi
  3. PHP正则表达式怎么匹配多行
  4. 高等数学公式大全_高中物理知识思维导图大全,赶紧收藏!
  5. c++ winpcap开发(2)
  6. C语言中188 10取模等于多少,C语言编程:任取x为十进制整数,编程将x转换成对应的八进制数后输出。...
  7. 一条 update 语句引起的事故,这回可以长长记性了
  8. 广义积分中值定理的证明(柯西中值定理)
  9. 【HDU_P3530】Subsequence
  10. html5朋友圈评论代码,微信朋友圈评论隐藏文字,超级好玩
  11. NLP(自然语言处理技术)
  12. 基于matlab深入形象理解频率分辨率,补零,栅栏效应,频谱泄漏
  13. 怎么压缩PPT大小?PPT太大了怎么压缩?
  14. 【基于51】红外寻迹智能小车-硬件篇
  15. R语言t检验,秩和检验,fdr的案例分析
  16. Python爬虫:js的btoa和atob和pythonBase64编码解码比对分析
  17. 【火车票】心蓝抢票软件
  18. 快速创建React Native App
  19. list remove 失效的解决方式
  20. 视频转换格式该如何操作

热门文章

  1. 超强配置 索爱A5无线蓝牙耳机重磅来袭
  2. Python快捷键及配置环境变量
  3. 2022年FIT2CLOUD飞致云开源成绩单
  4. ROS-Melodic安装roboware报错
  5. 计算器(C++QT)——有全部代码哦
  6. 【雕爷学编程】Arduino动手做(110)---JDY-31 蓝牙模块
  7. 多目标车辆路径问题学习全过程(详细)
  8. Latex从零基础入门到完成论文格式修改
  9. AHCI协议阅读笔记
  10. 风云卫星数据的正确解锁方式