hdu 1753 大明A+B

大明A+B

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8353    Accepted Submission(s): 2946


Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
 

Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
 

Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
 

Sample Input
1.1 2.9 1.1111111111 2.3444323343 1 1.1
 

Sample Output
4 3.4555434454 2.1
解题分析:
题目大意就是大数相加的问题,不过在此题中要注意到给出的书是否带小数点,同时,带小数的对于整数部分为0的,输出0;
思路:对于整数部分,倒着记录,病从小往大相加,对于小数部分,从正着记录,从大往小加。
代码比较长:
#include<stdio.h>
#include<string.h>
  int main()
    {
    	char s1[440];
    	char s2[440];
    	int   a1[440],a2[440];
    	int   b1[440],b2[440];
    	int   c1[440],c2[440];
    	int i,j;
    	int k1,k2;
    	int sum1,sum2;
    	int p,q,t;
    	int len1,len2,len3,len4;
    	int len5,len6;
      while(scanf("%s%s",s1,s2)!=EOF)
        {     k1=k2=1;
        	memset(a1,0,sizeof(a1));
        	memset(a2,0,sizeof(a2));
        	memset(b1,0,sizeof(b1));
        	memset(b2,0,sizeof(b2));
        	memset(c1,0,sizeof(c1));
        	memset(c2,0,sizeof(c2));
			 len5=strlen(s1);
             len6=strlen(s2);
            i=0;
            sum1=0;
            while(s1[i]!='.'&&s1[i]!='\0') {sum1++;i++ ;} //找到小数点,记录位数
              if(sum1==len5)    k1=0;      //同时标记是否为小数 
            j=0;
            sum2=0;
            while(s2[j]!='.'&&s2[j]!='\0')  {sum2++;j++;}//找到小数点,记录位数
               if(sum2==len6)   k2=0;     //同时标记是否为小数
               
         
             
           i=0;
           j=sum1-1;
		   while(j>=0)     //用数组a1记录整数部分
		     {
		     	a1[i]=s1[j]-'0';
		     	i++;
		     	j--;
		     }
			 i=0;
             j=sum2-1;
		   while(j>=0)     //用数组a2记录整数部分
		     {
		     	a2[i]=s2[j]-'0';
		     	i++;
		     	j--;
		     }
			 if(k1==1)  //第一个是小数,就用b1记录小数部分  
			{
			   	i=sum1+1;
			   	j=0;
			while(s1[i]!='\0')
		       {
		      	b1[j]=s1[i]-'0';
		      	j++;
		      	i++;
		       }
			}
			if(k2==1)   //第二个是小数,就用b1记录小数部分
			  { i=sum2+1;
			  j=0;
			  	while(s2[i]!='\0')
		        {
		      	b2[j]=s2[i]-'0';
		      	j++;
		      	i++;
		        }
			  }
			   len1=sum1;
			   len3=sum2;
			   len2=len5-1-sum1;
			   len4=len6-1-sum2;
			  
			   
			if(k1==0&&k2==1)    //一整,二小,总小数部分就是第二小数
			  {
			  	for(i=0;i<len4;i++)
			  	  c2[i]=b2[i];
			  }
			if(k1==1&&k2==0)   //二整,一小,总小数部分就是第一小数
			    {
			    for(i=0;i<len2;i++)
			  	  c2[i]=b1[i]; 
			    } 
			if(len2>len4)
		      {
		      	t=len2;
				len2=len4;
				len4=t;  
		      }
			if(k1==1&&k2==1)   //先将小数部分相加
			    {  q=0;
			    for(j=len4-1;j>=0;j--)
		         {
		       	    t=b2[j]+b1[j]+q;
		       	    c2[j]=t%10;
		       	    q=t/10;
		         }
				  a1[0]+=q;   //注意将小数最后一位进位进到整数部分	
			    }
		     if(len1>len3)
		     {
		     	t=len1;
		     	len1=len3;
		     	len3=t;
		     }
		      p=0;
		    for(j=0;j<len3;j++)    //整数部分相加
		       {
		       	t=a2[j]+a1[j]+p;
		       	c1[j]=t%10;
		       	p=t/10;
		       }
		        c1[len3]=p;
		     
		       j=len3;
		     while(c1[j]==0&&j>-1)  j--;
		        if(j==-1)   printf("0");
		         else
		      for(;j>=0;j--)
		        printf("%d",c1[j]);
		    if(!(k1==0&&k2==0))
			 {
			   
			    i=len4;
			while(c2[i]==0&&i>-1)   i--;
			   if(i>=0)
			     { printf(".");
			     	 for(j=0;j<=i;j++)
			    printf("%d",c2[j]);
			     }	 	
			 } printf("\n"); 
        }
    	return 0;
    }

【RIS 辅助的 THz 混合场波束斜视下的信道估计与定位】在混合场波束斜视效应下,利用太赫兹超大可重构智能表面感知用户信道与位置(Matlab代码实现)内容概要:本文围绕“IS 辅助的 THz 混合场波束斜视下的信道估计与定位”展开,重点研究在太赫兹(THz)通信系统中,由于混合近场与远场共存导致的波束斜视效应下,如何利用超大可重构智能表面(RIS)实现对用户信道状态信息位置的联合感知与精确估计。文中提了一种基于RIS调控的信道参数估计算法,通过优化RIS相移矩阵提升信道分辨率,并结合信号到达角(AoA)、到达时间(ToA)等信息实现高精度定位。该方法在Matlab平台上进行了仿真验证,复现了SCI一区论文的核心成果,展示了其在下一代高频通信系统中的应用潜力。; 适合人群:具备通信工程、信号处理或电子信息相关背景,熟悉Matlab仿真,从事太赫兹通信、智能反射面或无线定位方向研究的研究生、科研人员及工程师。; 使用场景及目标:① 理解太赫兹通信中混合场域波束斜视问题的成因与影响;② 掌握基于RIS的信道估计与用户定位联合实现的技术路径;③ 学习并复现高水平SCI论文中的算法设计与仿真方法,支撑学术研究或工程原型开发; 阅读建议:此资源以Matlab代码实现为核心,强调理论与实践结合,建议读者在理解波束成形、信道建模参数估计算法的基础上,动手运行调试代码,深入掌握RIS在高频通信感知一体化中的关键技术细节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值