4个回答
展开全部
本人参赛模板(含注释,含高精度加法减法运算,main函数有具体示例):
#include <iostream>
#include <string>
using namespace std;
#define HPSIZE 1024
//长度 //倒序存储
struct HP
{
int len;
int s[HPSIZE + 1];
};
//////////////////////////////////////
//输入,只能是正整数
//////////////////////////////////////
string base_input(string str)
{
char c;
c = getchar();
while(c != '\n')
{
str.push_back(c);
c = getchar();
}
return str;
}
/////////////////////////////////////////
//将一个字符串转换成大数存入a
// a 目标变量
// str 原始数据
/////////////////////////////////////////
HP change(string str)
{
HP a;
int i;
while(str[0] == '0' && str.size() != 1)
str.erase(0, 1);
a.len = (int)str.size();
for(i = 1; i <= a.len; ++i)
a.s[i] = str[a.len - i] - 48;
for (i = a.len + 1; i <= HPSIZE; ++i)
a.s[i] = 0;
return a;
}
/////////////////////////////////////////
//输出
/////////////////////////////////////////
void HPprint(const HP &y)
{
int i;
for(i = y.len; i >= 1; i--)
printf("%d", y.s[i]);
}
////////////////////////////////////////
//比较两数大小
//返回 a>b -> 返回值大于0
// a<b -> 返回值小于0
// a=b -> 返回0
////////////////////////////////////////
int HPcompare(const HP a, const HP b)
{
int len;
len = (a.len>b.len) ? a.len : b.len;
while(len > 0 && a.s[len] == b.s[len])
len--;
if(len==0) return 0;
else return a.s[len] - b.s[len];
}
/////////////////////////////////////
//高精度加法c=a+b
// a, b 加数
// c 和
/////////////////////////////////////
HP HPplus(const HP a, const HP b)
{
HP c;
int i, len;
for(i = 1; i <= HPSIZE; i++)
c.s[i] = 0;
len = (a.len>b.len) ? a.len : b.len;
for(i=1;i<=len;i++)
{
c.s[i] += a.s[i] + b.s[i];
if(c.s[i] >= 10)
{
c.s[i] -= 10;
c.s[i + 1]++;
}
}
if(c.s[len + 1] > 0)
len++;
c.len = len;
return c;
}
////////////////////////////////////
//高精度减法c=a-b
////////////////////////////////////
HP HPsub(const HP a, const HP b)
{
HP c;
int i, len;
for(i = 1; i <= HPSIZE; i++)
c.s[i] = 0;
len = (a.len>b.len) ? a.len : b.len;
for(i = 1; i <= len; i++)
{
c.s[i] += a.s[i] - b.s[i];
if(c.s[i] < 0) //借位
{
c.s[i] += 10;
c.s[i+1]--; //高位存于数组的后部
}
}
while(len > 1 && c.s[len] == 0)
len--;
c.len = len;
return c;
}
int main(void)
{
string str_a, str_b;
HP a, b;
str_a = "1000000"; //初始要运算的数字
str_b = "1000000";
a = change(str_a); //将一个字符串转换成大数存入a
b = change(str_b);
HPprint(HPsub(a, b)); //进行减法运算
return 0;
}
#include <iostream>
#include <string>
using namespace std;
#define HPSIZE 1024
//长度 //倒序存储
struct HP
{
int len;
int s[HPSIZE + 1];
};
//////////////////////////////////////
//输入,只能是正整数
//////////////////////////////////////
string base_input(string str)
{
char c;
c = getchar();
while(c != '\n')
{
str.push_back(c);
c = getchar();
}
return str;
}
/////////////////////////////////////////
//将一个字符串转换成大数存入a
// a 目标变量
// str 原始数据
/////////////////////////////////////////
HP change(string str)
{
HP a;
int i;
while(str[0] == '0' && str.size() != 1)
str.erase(0, 1);
a.len = (int)str.size();
for(i = 1; i <= a.len; ++i)
a.s[i] = str[a.len - i] - 48;
for (i = a.len + 1; i <= HPSIZE; ++i)
a.s[i] = 0;
return a;
}
/////////////////////////////////////////
//输出
/////////////////////////////////////////
void HPprint(const HP &y)
{
int i;
for(i = y.len; i >= 1; i--)
printf("%d", y.s[i]);
}
////////////////////////////////////////
//比较两数大小
//返回 a>b -> 返回值大于0
// a<b -> 返回值小于0
// a=b -> 返回0
////////////////////////////////////////
int HPcompare(const HP a, const HP b)
{
int len;
len = (a.len>b.len) ? a.len : b.len;
while(len > 0 && a.s[len] == b.s[len])
len--;
if(len==0) return 0;
else return a.s[len] - b.s[len];
}
/////////////////////////////////////
//高精度加法c=a+b
// a, b 加数
// c 和
/////////////////////////////////////
HP HPplus(const HP a, const HP b)
{
HP c;
int i, len;
for(i = 1; i <= HPSIZE; i++)
c.s[i] = 0;
len = (a.len>b.len) ? a.len : b.len;
for(i=1;i<=len;i++)
{
c.s[i] += a.s[i] + b.s[i];
if(c.s[i] >= 10)
{
c.s[i] -= 10;
c.s[i + 1]++;
}
}
if(c.s[len + 1] > 0)
len++;
c.len = len;
return c;
}
////////////////////////////////////
//高精度减法c=a-b
////////////////////////////////////
HP HPsub(const HP a, const HP b)
{
HP c;
int i, len;
for(i = 1; i <= HPSIZE; i++)
c.s[i] = 0;
len = (a.len>b.len) ? a.len : b.len;
for(i = 1; i <= len; i++)
{
c.s[i] += a.s[i] - b.s[i];
if(c.s[i] < 0) //借位
{
c.s[i] += 10;
c.s[i+1]--; //高位存于数组的后部
}
}
while(len > 1 && c.s[len] == 0)
len--;
c.len = len;
return c;
}
int main(void)
{
string str_a, str_b;
HP a, b;
str_a = "1000000"; //初始要运算的数字
str_b = "1000000";
a = change(str_a); //将一个字符串转换成大数存入a
b = change(str_b);
HPprint(HPsub(a, b)); //进行减法运算
return 0;
}
展开全部
没看明白
double f1 = 0.0, f2 = 1.0, f3 = 4.0;
f1 = f3 - f2;
double f1 = 0.0, f2 = 1.0, f3 = 4.0;
f1 = f3 - f2;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你题目和下面网址完全一样。一看便知。
http://goldhoo.blog.163.com/blog/static/8497659200610284416380/
#include "stdio.h"
#include "conio.h"
main()
{ int a[100]={0},b[100]={0},c[100]={0},m,i=0,k=0,n,sign=1;
char ch;
ch=getchar();
while(ch!='\n')
{a[i]=ch-48;
i++;
ch=getchar(); }
ch=getchar();
while(ch!='\n')
{b[k]=ch-48;
k++;
ch=getchar();}
if(i<k)
sign=-1;
if(i==k)
for(n=0;n<i;n++)
{if(a[n]<b[n])
{sign=-1;break;}
else if(a[n]>b[n])
break;}
m=i>k?i:k;
if(sign==-1)
{printf("-");
for(n=m-1;n>=0;n--)
{c[n]=b[k-1]-a[i-1];
if(c[n]<0)
{c[n]=c[n]+10;
b[k-2]--;}
i--;k--;
if(i<1);
a[i-1]=0; }}
else
for(n=m-1;n>=0;n--)
{c[n]=a[i-1]-b[k-1];
if(c[n]<0)
{c[n]=c[n]+10;
a[i-2]--;}
i--;k--;
if(k<1);
b[k-1]=0; }
for(n=0;n<m;n++)
if(c[n]==0)
continue;
else
break;
if(n==m)
n=m-1;
for(i=n;i<m;i++)
{printf("%d",c[i]);}
getch();}
http://goldhoo.blog.163.com/blog/static/8497659200610284416380/
#include "stdio.h"
#include "conio.h"
main()
{ int a[100]={0},b[100]={0},c[100]={0},m,i=0,k=0,n,sign=1;
char ch;
ch=getchar();
while(ch!='\n')
{a[i]=ch-48;
i++;
ch=getchar(); }
ch=getchar();
while(ch!='\n')
{b[k]=ch-48;
k++;
ch=getchar();}
if(i<k)
sign=-1;
if(i==k)
for(n=0;n<i;n++)
{if(a[n]<b[n])
{sign=-1;break;}
else if(a[n]>b[n])
break;}
m=i>k?i:k;
if(sign==-1)
{printf("-");
for(n=m-1;n>=0;n--)
{c[n]=b[k-1]-a[i-1];
if(c[n]<0)
{c[n]=c[n]+10;
b[k-2]--;}
i--;k--;
if(i<1);
a[i-1]=0; }}
else
for(n=m-1;n>=0;n--)
{c[n]=a[i-1]-b[k-1];
if(c[n]<0)
{c[n]=c[n]+10;
a[i-2]--;}
i--;k--;
if(k<1);
b[k-1]=0; }
for(n=0;n<m;n++)
if(c[n]==0)
continue;
else
break;
if(n==m)
n=m-1;
for(i=n;i<m;i++)
{printf("%d",c[i]);}
getch();}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用数组模拟啊,很容易的啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询