登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

being23

写给未来的自己

 
 
 
 
 

日志

 
 
关于我

真正的坚定,就是找到力量去做自己喜欢的事情,并为之努力,这样才会觉得生活是幸福的。

大数乘法  

2011-09-28 22:11:04|  分类: Tech |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

/*
  Name: 大数乘法
  Copyright:
  Author: 柒
  Date: 28/09/11 22:10
  Description:
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void reverse(char str[])
{
     int len = strlen(str);
     int len2 = (int)(len/2);
    
     int i = 0;
     char tmp = 0;
     for( i=0; i<len2; i++)
     {
          tmp = str[i];
          str[i] = str[len-1-i];
          str[len-1-i] = tmp;
     }    
}

bool zerovec(char str[])
{
     int i = 0;
      int tmp = 0;
      int len = strlen(str);
      for (i=0; i<len; i++)
          tmp = tmp + str[i] - '0';
      if (tmp)
         return 0;
      else
         return 1;      
}

char * mul(char str1[], char str2[])
{
     int len1 = strlen(str1);
     int len2 = strlen(str2);
     int len = len1 + len2;
     char *res = (char*)malloc(len+1);
    

     int i = 0, j = 0, k = 0;
     int tmp = 0;
    
     if(zerovec(str1) || zerovec(str2))
     {
          res[0] = '0';
            res[1] = 0;
            return res;                        
     }
    
     reverse(str1);
     reverse(str2);
     for ( i=0; i<len; i++)
         res[i] = '0';
      res[i] = 0;

     int sum = 0, ext = 0;
     for ( i=0; i<len1; i++ )     
     {
         k = 0;
         ext = 0;
         for ( j=0; j<len2; j++ )   
         {
                 sum = res[k+i] - '0' + (str1[i] - '0')*(str2[j] - '0') + ext;
                 res[k+i] = sum%10 + '0';
                 ext = sum/10;
                 k++;
         }
         do
         {
                 sum = res[k+i] - '0' + ext;
                 res[k+i] = sum%10 + '0';
                 ext = sum/10;
                 k++;
         }while(ext != 0);
        
     }
    
     for( i=len-1; i>=0; i-- )
     {
        if(res[i] != '0')
            break;
     }     
     res[i+1] = 0;
        
     reverse(res);
     return res;
}

int main()
{
    char str1[] = "111123313123";
    char str2[] = "123456";

    char *res = NULL;
   
     res = mul(str1, str2);
    printf(res);
    system("pause");
    return 0;   
}

6%}H0M4FQRL{PPK]T){@W65

  评论这张
 
阅读(208)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018