高精度加减乘模版

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <iterator>
using namespace std;

int compare(string str1, string str2)
{
  while(str1[0]=='0')
    {
      str1.erase(0,1);///删除str1[0]
    }
  while(str2[0]=='0')
    {
      str2.erase(0,1);
    }
  if(str1.size() > str2.size()) ///长度长的整数大于长度小的整数
    return 1;
  else if(str1.size() < str2.size())
    return -1;
  else
    return str1.compare(str2);
  ///若长度相等,从头到尾按位比较,
  ///compare函数:相等返回0,大于返回1,小于返回-1
}
int to_int(char ch)
  {
    return ch-48;
  }
char to_char(int i)
  {
    return (char)(i+48);
  }
void dipose_head(string& str,int sign)    ///str为引用类型
  {
    str.erase(0, str.find_first_not_of('0'));
    ///去除结果中的前导0
    if(str.empty()) str = "0";
    if((sign == -1) && (str[0] != '0'))
    ///处理符号位 ,若str[0] == '0'说明结果是0,就不必要在前面加上-
      str = '-' + str;
  }
///高精度加法
string ADD_INT(string str1, string str2)
///计算str1 + str2的值,处理成 str1 ,str2 >= 0
{
///要事先声明MINUS_INT
  string str;
///str1 ,str2 >= 0的情况
  string::size_type l1, l2;
  int i;
  l1 = str1.size();
  l2 = str2.size();
  if(l1 < l2)
///把两个整数对齐,短整数前面加0补齐
    for(i = 1; i <= l2 - l1; i++)
      str1 = '0' + str1;
  else
    for(i = 1; i <= l1 - l2; i++)
      str2 = '0' + str2;
  int int1 = 0, int2 = 0;
  ///int2 记录进位
  for(i = str1.size() - 1; i >= 0; i--)
   {
        int1 = ( str1[i]+str2[i] -  96  + int2 ) % 10;
        int2 = ( str1[i]+str2[i] -  96  + int2 ) / 10;
        str = to_char(int1) + str;
      }
  if(int2 != 0) str = to_char(int2) + str;
 ///处理最后的进位
      return str;
}
///高精度减法
string MINUS_INT(string str1, string str2)
///计算str1 - str2的值,先处理成 str1 ,str2 >= 0,再处理成 str1 > str2 >= 0
{
  int sign = 1;       ///sign 为符号位
  string str;
  if(str2[0] == '-')
     {
     if(str1[0]!='-')
       str = ADD_INT(str1, str2.erase(0, 1));
        else
          str=MINUS_INT(str2.erase(0,1),str1.erase(0,1));
     }
  else
     {
       if(str1[0]=='-')
        {
            str = ADD_INT(str1.erase(0, 1), str2);
            if(str[0] != '0')
                str = "-" + str;
        }
        else
 ///str1 ,str2 >= 0的情况
        {
            int res = compare(str1, str2);
            if(res == 0) return "0";
 ///二者相等
            if(res < 0)
              {
                  sign = -1;
                  str1.swap(str2);
              }
             string::size_type temp_int;
             temp_int = str1.size() - str2.size();
             for(int i = str2.size() - 1; i >= 0; i--)
               {
                   if(str1[i + temp_int] < str2[i])
                     {
                        str1[i + temp_int - 1] = str1[i + temp_int - 1] - 1;
                        str = to_char(str1[i + temp_int] - str2[i] + 10) + str;
                     }
                   else
                        str =to_char(str1[i + temp_int] - str2[i]) + str;
               }
         str = str1.substr(0,temp_int) + str;
 ///str1[i] 从i=0 到 i=temp_int - 1
         dipose_head(str,sign);
         }
    }
    return str;
}
///高精度乘法
string MULTIPLY_INT(string str1, string str2)
   {
       int i, j;
       string str;
       string::size_type len1, len2;
       len1 = str1.size(); len2 = str2.size();
       for(i = len2 - 1; i >= 0; i --)
       ///实现手工乘法
         {
             string temp_str;
             int int1 = 0, int2 = 0, int3 = to_int(str2[i]);
             if(int3 != 0)
             {
                 for(j = 1; j <= len2-1 - i; j++)
                 temp_str = '0' + temp_str;
                 for(j = len1 - 1; j >= 0; j--)
                   {
                       int1 = (int3 * to_int(str1[j]) + int2) % 10;
                       int2 = (int3 * to_int(str1[j]) + int2) / 10;
                       temp_str = to_char(int1) + temp_str;
                   }
                if(int2 != 0)
                   temp_str = to_char(int2) + temp_str;
            }
            str = ADD_INT(str, temp_str);
        }
      return str;
}

string to_str(int n)
{
    string str;
    while(n)
      {
        str.push_back(n%10+48);
        n=n/10;
      }
    reverse(str.begin(),str.end());
    return str;
}
int main()
  {
      cout<<ADD_INT("111111111111111111111111111111","1")<<endl;
        return 0;
        }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值