日历

2008 7.5 Sat
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2008 - 7 «»

文章搜索

日志文章

2008年05月06日 11:38:41

大整数相加,相乘,相减(python版)

最近学了一下python,刚学时感觉很方便,但后来越学越觉得还是没C/C++好,角本语言只是方便,快速,适合一些公司应用,但不利于我们深入学习,所以我把主要精力还是放在C/C++上,学习不仅要学应用,深入理解其原理更为重要,但我还是把最近用python写的这个算法发上来。希望高手来指点,也可以让新手了解下角本的方便快速的优点。

Copy code

#!/usr/bin/python
# Filename: bignumoperation.py
import string
# remove frontal zero
def remove_zero(numstr=''):
  strlen = len(numstr)
  if strlen > 0:
    for i in range(0, strlen):
        if numstr[i] == '0':
          continue
        else:
          break
    if i == strlen:
        numstr='0'
    elif i > 0:
        numstr = numstr[i:]
  return numstr
# validate num
def validate_numstr(numstr=''):
  strlen = len(numstr)
  flag = 0
  if strlen == 0:
    return 0
  else:
    for i in range(0, strlen):
        if ((numstr[i] < '0') or (numstr[i] > '9')):
          return 0
    return 1
# x is or not biger y ( x and y are the same long )
def is_big(x='', y=''):
  ret = 0
  strlen = len(x)
  for i in range(0, strlen):
    if ( int(x[i]) < int(y[i]) ):
        ret = 0
        break
    elif ( int(x[i]) > int(y[i]) ):
        ret = 1
        break
  else:   # ==
    ret = 1
  return ret
# add
def operation_add(x='', y=''):
  # print x[len(x)-1]
  # print y[len(y)-1]
  if ((validate_numstr(x)) and (validate_numstr(y))):
    x = remove_zero(x)
    y = remove_zero(y)
    retString = ''
    flag = 0
    tmp = 0
    position_x = len(x) - 1
    position_y = len(y) - 1
    while ((position_x >= 0) or (position_y >= 0)):
        if (position_x < 0):
          retString = y[position_y] + retString
          position_y -= 1
        else:
          if (position_y < 0):
            retString = x[position_x] + retString
            position_x -= 1
          else:
            # print x[position_x]
            # print y[position_y]
            # tmp = 1
            tmp = int(x[position_x]) + int(y[position_y]) + flag
            retString = str(tmp % 10) + retString
            flag = tmp / 10
            position_x -= 1
            position_y -= 1
    else:
        if flag == 1:
          retString = '1' + retString
  else:
    print "Parameter is not legal!"
    return "error"
  return retString
# multiply
def operation_multi(x='', y=''):
  if ((validate_numstr(x)) and (validate_numstr(y))):
    x = remove_zero(x);
    y = remove_zero(y);
    flag = 0
    tmp = 0
    position_y = len(y) - 1
    retString = '0'
    while (position_y >= 0):
        position_x = len(x) - 1
        tmpString = ''
        while (position_x >= 0):
          tmp = int(x[position_x]) * int(y[position_y]) + flag
          tmpString = str(tmp % 10) + tmpString
          flag = tmp / 10
          position_x -= 1
        else:
          if flag > 0:
            tmpString = str(flag) + tmpString
          for i in range(0, len(y)-1-position_y):
            tmpString = tmpString + '0'
        retString = operation_add(retString, tmpString)
        position_y -= 1
  else:
    print "Parameter is not legal!"
    return "error"
  return retString
def operation_sub(x='', y=''):
  if ((validate_numstr(x)) and (validate_numstr(y))):
    x = remove_zero(x)
    y = remove_zero(y)
    retString = ''
    negative = 0
    flag = 0
    tmp = 0
    position_x = len(x) - 1
    position_y = len(y) - 1
    if ( position_x < position_y ):
        swap = x
        x = y
        y = swap
        negative = 1
    elif ( position_x == position_y ):
        if ( is_big(x, y) == 0 ):
          swap = x
          x = y
          y = swap
          negative = 1
    while ( (position_x >= 0) ):
        if ( position_y < 0 ):
          tmp = int(x[position_x]) - flag
          position_x -= 1
        else:
          tmp = int(x[position_x]) - flag - int(y[position_y])
          position_x -= 1
          position_y -= 1
        if ( tmp < 0 ):
          flag = 1
          tmp = 10 + tmp
        else:
          flag = 0
        retString = str(tmp) + retString
    retString = remove_zero(retString)
    if ( negative == 1 ):
        retString = '-' + retString
  else:
    print "Parameter is not legal!"
    return "error"
  return retString
a = ''
b = ''
a = raw_input("Please enter first num:")
b = raw_input("please enter scend num:")
print operation_add(a, b)
print operation_multi(a, b)
print operation_sub(a, b)

Tags: 大数相乘   python  

类别: 其它 |  评论(2) |  浏览(528) |  收藏
2楼 [匿名]MR 兰 2008年05月21日 18:51:45 Says:
日,是不是就差我的perl版啦
哈哈哈

1楼 [匿名]上海大众搬场 2008年05月07日 12:01:42 Says:
vzhuyhe
[url=http://www.dzbc688.com]上海搬场[/url]
[url=http://www.dzbc688.com]搬场公司[/url]
[url=http://www.dzbc688.com]上海搬场公司[/url]
[url=http://www.dzbc688.com]搬场[/url]
[url=http://www.dzbc688.com]大众搬场[/url]
[url=http://www.dzbc688.com]大众搬场公司[/url]
[url=http://www.dzbc688.com]上海大众搬场[/url]
[url=http://www.dzbc688.com]上海大众搬家[/url]
[url=http://www.dzbc688.com]上海大众搬场公司[/url]
[url=http://www.dzbc688.com]上海大众搬家公司[/url]
[url=http://www.021gxbc.com]公兴搬家[/url]
[url=http://www.021gxbc.com]公兴搬家公司[/url]
[url=http://www.021gxbc.com]公兴搬场[/url]
[url=http://www.021gxbc.com]上海公兴搬家[/url]
[url=http://www.021gxbc.com]上海公兴搬场[/url]
[url=http://www.021gxbc.com]上海公兴搬场公司[/url]
[url=http://www.021gxbc.com]上海公兴搬家公司[/url]
[url=http://www.seo021.net]上海书生软件[/url]
[url=http://www.021688.com]上海报纸广告[/url]
[url=http://www.021688.com]上海报纸[/url]
[url=http://www.huay56.cn]华宇物流[/url]
[url=http://www.huay56.cn]上海华宇物流[/url]
[url=http://www.huay56.cn]华宇物流公司[/url]
[url=http://www.huay56.cn]上海华宇物流公司[/url]
dakhgkd
[url=http://www.021gxbj.com]强生搬家[/url]
[url=http://www.021gxbj.com]强生搬场[/url]
[url=http://www.021gxbj.com]上海强生搬家[/url]
[url=http://www.021gxbj.com]上海强生搬场[/url]
[url=http://www.021gxbj.com]上海强生搬家公司[/url]
[url=http://www.021gxbj.com]上海强生搬场公司[/url]
[url=http://www.gxbj168.com]公兴搬家[/url]
[url=http://www.gxbj168.com]公兴搬家公司[/url]
[url=http://www.gxbj168.com]公兴搬场[/url]
[url=http://www.gxbj168.com]上海公兴搬家[/url]
[url=http://www.gxbj168.com]上海公兴搬场[/url]
[url=http://www.gxbj168.com]上海公兴搬场公司[/url]
[url=http://www.gxbj168.com]上海公兴搬家公司[/url]
[url=http://www.dzbc688.net.cn]大众搬场[/url]
[url=http://www.dzbc688.net.cn]大众搬场公司[/url]
[url=http://www.dzbc688.net.cn]上海大众搬场[/url]
[url=http://www.dzbc688.net.cn]上海大众搬家[/url]
[url=http://www.dzbc688.net.cn]上海大众搬场公司[/url]
[url=http://www.dzbc688.net.cn]上海大众搬家公司[/url]
fjkajfgjahgajh
[url=http://www.shmlrs.cn]上海婚纱摄影[/url]
[url=http://www.shmlrs.cn]上海婚纱摄影中心[/url]
[url=http://www.shmlrs.cn]婚纱摄影中心[/url]
[url=http://www.shmlrs.cn]婚纱摄影[/url]
[url=http://www.shgxbcgs.com.cn]公兴搬家[/url]
[url=http://www.shgxbcgs.com.cn]公兴搬场[/url]
[url=http://www.shgxbcgs.com.cn]上海公兴搬家[/url]
[url=http://www.shgxbcgs.com.cn]上海公兴搬场[/url]
[url=http://www.shgxbcgs.com.cn]上海公兴搬场公司[/url]
[url=http://www.shgxbcgs.com.cn]上海公兴搬家公司[/url]
[url=http://www.shgxbcgs.com.cn]上海公兴搬场公司[/url]
[url=http://www.shgxbcgs.com.cn]上海公兴搬家公司[/url]
[url=http://www.shgxdz.com.cn]吊装[/url]
[url=http://www.shgxdz.com.cn]上海吊装[/url]
[url=http://www.shgxdz.com.cn]吊装公司[/url]
[url=http://www.shgxdz.com.cn]上海吊装公司[/url]
[url=http://www.shztky56.com.cn]华宇物流[/url]
[url=http://www.shztky56.com.cn]华宇物流公司[/url]
[url=http://www.shztky56.com.cn]上海华宇物流[/url]
[url=http://www.shztky56.com.cn]上海华宇物流公司[/url]
[url=http://www.shgxbc88.cn]公兴搬场[/url]
[url=http://www.shgxbc88.cn]公兴搬家[/url]
[url=http://www.shgxbc88.cn]上海公兴搬场[/url]
[url=http://www.shgxbc88.cn]上海公兴搬家[/url]
[url=http://www.dzbcwl.net.cn]大众搬场[/url]
[url=http://www.dzbcwl.net.cn]大众搬场公司[/url]
[url=http://www.dzbcwl.net.cn]上海大众搬场[/url]
[url=http://www.dzbcwl.net.cn]上海大众搬家[/url]
[url=http://www.dzbcwl.net.cn]上海大众搬场公司[/url]
[url=http://www.dzbcwl.net.cn]上海大众搬家公司[/url]
发表评论