A-B Problem 大数相称
发布时间:2020-12-28 22:54:12 所属栏目:大数据 来源:网络整理
导读:A-B Problem http://acm.nyist.net/JudgeOnline/problem.php?pid=524 时刻限定:1000?ms ?|? 内存限定:65535?KB 难度:3 输入 有多组测试数据。每组数据包罗两行,别离代表A和B。 它们的位数小于100,且每个数字前中也许包括+,- 号。 每个数字前面和后头都
|
A-B Problemhttp://acm.nyist.net/JudgeOnline/problem.php?pid=524 时刻限定:1000?ms ?|? 内存限定:65535?KB 难度:3 输入 有多组测试数据。每组数据包罗两行,别离代表A和B。 输出 对付每组数据,输出一行。 样例输入 1 1 1.0 2.0 样例输出 YES NO 描写 A+B题目早已经被各人所熟知了,是不是很无聊呢?此刻各人来做一下A-B吧。 此刻有两个实数A和B,智慧的你,能不能判定出A-B的值是否便是0呢? ? 我的代码 #include <stdio.h>
#include <string.h>
#define MAX 120
//处理赏罚化简字符串 变为 标记位 + 数字 + 小数点 + 小数位 如 +001. --> +1 001.00 --> +1
void deal(char *s){
int dot,len,i,t,k;
//非凡环境 .000 00.00 +0.00 -0.00
//增补标记位
if(s[0]!='+' && s[0]!='-'){
len = strlen(s);
for(i=len+1;i>0;i--)
s[i]=s[i-1];
s[0]='+';
}
//处理赏罚整数位 .1 --> +0.1
//只有小数点时补 0
if(s[1]=='.'){
len = strlen(s);
for(i=len+1;i>1;i--)
s[i]=s[i-1];
s[1]='0';
}
//将整数位前面的无效 0 去除
for(k=1;s[k] && s[k]=='0' && s[k+1]!='.' && s[k+1] ;k++);
t = k-1; //左移的位数
for(i=k;s[i];i++)
s[i-t]=s[i];
s[i-t]=' ';
//处理赏罚小数
len = strlen(s);
//小数点的位置
for(dot=0;s[dot] && s[dot]!='.';dot++);
for(i=len-1;i>dot && s[i]=='0';i--);
s[i+1]=' ';
if(s[i]=='.') s[i]=' ';
//非凡环境 +0 -0
len=strlen(s);
if(len==2 && s[1]=='0'){
s[0]='0';
s[1]=' ';
}
}
char a[MAX],b[MAX];
int main(int argc,char *argv[])
{
int state,lena,lenb;
while( scanf("%s %s",a,b)!=EOF ){
deal(a);
deal(b);
// printf("%s %sn",b);
if(!strcmp(a,b))
printf("YESn");
else
printf("NOn");
}
return 0;
}
? 标题保举 #include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
const int M=100;
void back(char* c,int &l)
{
if(strchr(c,'.') == NULL)
return ;
for(int i=l-1;i>=1;i--)
{
if(c[i]!='0')
break;
l--;
}
if(c[l-1]=='.')
l--;
c[l]=' ';
//puts("after back->");
//puts(c);
}
void front(char* c,int &l,bool &f)
{
int cnt = isdigit(c[0]) ? 0 : 1;
if(c[0]=='-')
f = false;
for(int i=cnt;i<l-1;i++)
{
if(c[i+1]=='.' || c[i]!='0')
break;
cnt++;
}
if(cnt)
{
for(int i=0;i<l-cnt;i++)
c[i] = c[i+cnt];
c[l-cnt] = ' ';
}
//puts("after front->");
//printf(f?"+ ":"- ");
//puts(c);
}
void deal(char *c,bool &f)
{
int l = strlen(c);
f = true;
back(c,l);
front(c,l,f);
}
bool Cmp(char* A,char* B,bool a,bool b)
{
if(strcmp(A,B) == 0)
{
if(strcmp(A,"0") == 0 || a^b == 0)
return true;
}
return false;
}
int main()
{
char A[M],B[M];
bool a,b;
while(~scanf("%s%s",A,B))
{
deal(A,a);
deal(B,b);
puts(Cmp(A,B,b)?"YES":"NO");
}
return 0;
}
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

