划分两个整数并舍入结果,而不使用浮点

dyn*_*mic 11 c++

我需要将两个数字分开并将其四舍五入.有没有更好的方法来做到这一点?

int myValue = (int) ceil( (float)myIntNumber / myOtherInt );
Run Code Online (Sandbox Code Playgroud)

我发现不得不投两个不同的时间.(extern int cast只是为了关闭警告)

注意我必须内部转换才能浮动

int a = ceil(256/11); //> Should be 24, but it is 23
              ^example
Run Code Online (Sandbox Code Playgroud)

jwo*_*der 19

假设这两个myIntNumbermyOtherInt是积极的,你可以这样做:

int myValue = (myIntNumber + myOtherInt - 1) / myOtherInt;
Run Code Online (Sandbox Code Playgroud)

  • 如果您怀疑其他人很难阅读,请附上一份写得很好的评论. (7认同)
  • @ yes123只需使其成为一个不言自明的功能.`int myValue = divide_and_round_up(myIntNumber,myOtherInt);`(或`div_ceil`) (7认同)
  • 如果其他开发人员发现它令人困惑,他们应该学会阅读这个表达 - 这不是一个不常见的习语. (2认同)
  • `int myValue = (myIntNumber - 1) / myOtherInt + 1;` 可避免 myOtherInt 较大时发生溢出。 (2认同)

Ben*_*igt 9

在DyP的帮助下,提出了以下无分支公式:

int idiv_ceil ( int numerator, int denominator )
{
    return numerator / denominator
             + (((numerator < 0) ^ (denominator > 0)) && (numerator%denominator));
}
Run Code Online (Sandbox Code Playgroud)

它避免了浮点转换并传递了一套基本的单元测试,如下所示:


这是避免模运算符的另一个版本.

int idiv_ceil ( int numerator, int denominator )
{
    int truncated = numerator / denominator;
    return truncated + (((numerator < 0) ^ (denominator > 0)) &&
                                             (numerator - truncated*denominator));
}
Run Code Online (Sandbox Code Playgroud)

第一个会比较快在哪里IDIV同时返回商和余数(和编译器是足够聪明的使用)处理器.

  • @aaronman接受的答案是**不是**不正确.阅读假设. (2认同)
  • @aaronman:因为这个网站会惩罚那些不"接受"答案的人.所以他们最终选择了最不好的那个. (2认同)
  • 你确定它没有分支吗?我希望`&&`运算符引入一个分支,因为它需要短路评估. (2认同)

Sci*_*dix 5

基准测试

\n

由于答案中显示了很多不同的方法,并且没有一个答案实际上证明了性能方面的任何优势,因此我尝试自己对它们进行基准测试。我的计划是写一个答案,其中包含一个简短的表格和一个确定的答案,哪种方法最快。

\n

不幸的是事情没那么简单。(从来都不是。)舍入公式的性能似乎取决于所使用的数据类型、编译器优化级别。

\n

在一种情况下,从一种方法到另一种方法,速度提高了 7.5\xc3\x97。因此,对于某些人来说,影响可能很大。

\n

长话短说

\n

对于long整数,使用类型转换为floatand的简单版本std::ceil实际上是最快的。这对我个人来说很有趣,因为我打算将它与size_t通常定义unsigned long.

\n

对于普通的int,这取决于你的优化级别。对于较低级别的 @Jwodder\'s 解决方案表现最好。对于最高级别来说std::ceil是最佳的。但有一个例外:对于 clang/unsigned int组合 @Jwodder 来说仍然更好。

\n

已接受答案的解决方案从未真正优于其他两个。但您应该记住,@Jwodder 的解决方案不适用于底片。

\n

结果在底部。

\n

实施

\n

回顾一下我进行基准测试和比较的四种方法:

\n

@Jwodder 的版本(Jwodder)

\n
template<typename T>\ninline T divCeilJwodder(const T& numerator, const T& denominator)\n{\n    return (numerator + denominator - 1) / denominator;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

@Ben Voigt\'s使用模的版本 (VoigtModulo)

\n
template<typename T>\ninline T divCeilVoigtModulo(const T& numerator, const T& denominator)\n{\n    return numerator / denominator + (((numerator < 0) ^ (denominator > 0))\n        && (numerator%denominator));\n}\n
Run Code Online (Sandbox Code Playgroud)\n

@Ben Voigt\'s 版本不使用模 (VoigtNoModulo)

\n
inline T divCeilVoigtNoModulo(const T& numerator, const T& denominator)\n{\n    T truncated = numerator / denominator;\n    return truncated + (((numerator < 0) ^ (denominator > 0))\n        && (numerator - truncated*denominator));\n}\n
Run Code Online (Sandbox Code Playgroud)\n

OP 的实现(TypeCast)

\n
template<typename T>\ninline T divCeilTypeCast(const T& numerator, const T& denominator)\n{\n    return (int)std::ceil((double)numerator / denominator);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

方法

\n

在单个批次中,除法执行了 1 亿次。针对编译器/优化级别、使用的数据类型和使用的实现的每个组合计算十个批次。下面显示的值是所有 10 个批次的平均值(以毫秒为单位)。给出的误差是标准差

\n

所使用的整个源代码可以在这里找到。此外,您可能会发现脚本很有用,它可以使用不同的编译器标志编译和执行源代码。

\n

整个基准测试是在 i7-7700K 上执行的。使用的编译器版本是GCC 10.2.0和clang 11.0.1。

\n

结果

\n

现在,不用多说,结果如下:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n
DataType
算法
海湾合作委员会
-O0
-O1-氧气-O3-Os-奥法斯特-Og铿锵
-O0
-O1-氧气-O3-奥法斯特-Os-Oz
unsigned
杰沃德264.1\xc2\xa0\xc2\xb1\xc2\xa00.9 \xc2\xa0175.2\xc2\xa0\xc2\xb1\xc2\xa00.9 \xc2\xa0153.5\xc2\xa0\xc2\xb1\xc2\xa00.7 \xc2\xa0175.2\xc2\xa0\xc2\xb1\xc2\xa00.5 \xc2\xa0153.3\xc2\xa0\xc2\xb1\xc2\xa00.5153.4\xc2\xa0\xc2\xb1\xc2\xa00.8175.5\xc2\xa0\xc2\xb1\xc2\xa00.6 \xc2\xa0329.4\xc2\xa0\xc2\xb1\xc2\xa01.3 \xc2\xa0220.0\xc2\xa0\xc2\xb1\xc2\xa01.3 \xc2\xa0146.2\xc2\xa0\xc2\xb1\xc2\xa00.6 \xc2\xa0146.2\xc2\xa0\xc2\xb1\xc2\xa00.6 \xc2\xa0146.0\xc2\xa0\xc2\xb1\xc2\xa00.5 \xc2\xa0153.2\xc2\xa0\xc2\xb1\xc2\xa00.3 \xc2\xa0153.5\xc2\xa0\xc2\xb1\xc2\xa00.6 \xc2\xa0
福格特模数528.5\xc2\xa0\xc2\xb1\xc2\xa02.5306.5\xc2\xa0\xc2\xb1\xc2\xa01.0175.8\xc2\xa0\xc2\xb1\xc2\xa00.7175.2\xc2\xa0\xc2\xb1\xc2\xa00.5 \xc2\xa0175.6\xc2\xa0\xc2\xb1\xc2\xa00.7175.4\xc2\xa0\xc2\xb1\xc2\xa00.6352.0\xc2\xa0\xc2\xb1\xc2\xa01.0588.9\xc2\xa0\xc2\xb1\xc2\xa06.4408.7\xc2\xa0\xc2\xb1\xc2\xa01.5164.8\xc2\xa0\xc2\xb1\xc2\xa01.0164.0\xc2\xa0\xc2\xb1\xc2\xa00.4164.1\xc2\xa0\xc2\xb1\xc2\xa00.4175.2\xc2\xa0\xc2\xb1\xc2\xa00.5175.8\xc2\xa0\xc2\xb1\xc2\xa00.9
Voigt无模375.3\xc2\xa0\xc2\xb1\xc2\xa01.5175.7\xc2\xa0\xc2\xb1\xc2\xa01.3 \xc2\xa0192.5\xc2\xa0\xc2\xb1\xc2\xa01.4197.6\xc2\xa0\xc2\xb1\xc2\xa01.9200.6\xc2\xa0\xc2\xb1\xc2\xa07.2176.1\xc2\xa0\xc2\xb1\xc2\xa01.5197.9\xc2\xa0\xc2\xb1\xc2\xa00.5541.0\xc2\xa0\xc2\xb1\xc2\xa01.8263.1\xc2\xa0\xc2\xb1\xc2\xa00.9186.4\xc2\xa0\xc2\xb1\xc2\xa00.6186.4\xc2\xa0\xc2\xb1\xc2\xa01.2187.2\xc2\xa0\xc2\xb1\xc2\xa01.1197.2\xc2\xa0\xc2\xb1\xc2\xa00.8197.1\xc2\xa0\xc2\xb1\xc2\xa00.7
类型转换348.5\xc2\xa0\xc2\xb1\xc2\xa02.7231.9\xc2\xa0\xc2\xb1\xc2\xa03.9234.4\xc2\xa0\xc2\xb1\xc2\xa01.3226.6\xc2\xa0\xc2\xb1\xc2\xa01.0137.5\xc2\xa0\xc2\xb1\xc2\xa00.8 \xc2\xa0138.7\xc2\xa0\xc2\xb1\xc2\xa01.7 \xc2\xa0243.8\xc2\xa0\xc2\xb1\xc2\xa01.4591.2\xc2\xa0\xc2\xb1\xc2\xa02.4591.3\xc2\xa0\xc2\xb1\xc2\xa02.6155.8\xc2\xa0\xc2\xb1\xc2\xa01.9155.9\xc2\xa0\xc2\xb1\xc2\xa01.6155.9\xc2\xa0\xc2\xb1\xc2\xa02.4214.6\xc2\xa0\xc2\xb1\xc2\xa01.9213.6\xc2\xa0\xc2\xb1\xc2\xa01.1
unsigned long
杰沃德658.6\xc2\xa0\xc2\xb1\xc2\xa02.5546.3\xc2\xa0\xc2\xb1\xc2\xa00.9549.3\xc2\xa0\xc2\xb1\xc2\xa01.8549.1\xc2\xa0\xc2\xb1\xc2\xa02.8540.6\xc2\xa0\xc2\xb1\xc2\xa03.4548.8\xc2\xa0\xc2\xb1\xc2\xa01.3486.1\xc2\xa0\xc2\xb1\xc2\xa01.1638.1\xc2\xa0\xc2\xb1\xc2\xa01.8613.3\xc2\xa0\xc2\xb1\xc2\xa02.1190.0\xc2\xa0\xc2\xb1\xc2\xa00.8 \xc2\xa0182.7\xc2\xa0\xc2\xb1\xc2\xa00.5182.4\xc2\xa0\xc2\xb1\xc2\xa00.5496.2\xc2\xa0\xc2\xb1\xc2\xa01.3554.1\xc2\xa0\xc2\xb1\xc2\xa01.0
福格特模数1,169.0\xc2\xa0\xc2\xb1\xc2\xa02.91,015.9\xc2\xa0\xc2\xb1\xc2\xa04.4550.8\xc2\xa0\xc2\xb1\xc2\xa02.0504.0\xc2\xa0\xc2\xb1\xc2\xa01.4550.3\xc2\xa0\xc2\xb1\xc2\xa01.2550.5\xc2\xa0\xc2\xb1\xc2\xa01.31,020.1\xc2\xa0\xc2\xb1\xc2\xa02.91,259.0\xc2\xa0\xc2\xb1\xc2\xa09.01,136.5\xc2\xa0\xc2\xb1\xc2\xa04.2187.0\xc2\xa0\xc2\xb1\xc2\xa03.4 \xc2\xa0199.7\xc2\xa0\xc2\xb1\xc2\xa06.1197.6\xc2\xa0\xc2\xb1\xc2\xa01.0549.4\xc2\xa0\xc2\xb1\xc2\xa01.7506.8\xc2\xa0\xc2\xb1\xc2\xa04.4
Voigt无模768.1\xc2\xa0\xc2\xb1\xc2\xa01.7559.1\xc2\xa0\xc2\xb1\xc2\xa01.8534.4\xc2\xa0\xc2\xb1\xc2\xa01.6533.7\xc2\xa0\xc2\xb1\xc2\xa01.5559.5\xc2\xa0\xc2\xb1\xc2\xa01.7534.3\xc2\xa0\xc2\xb1\xc2\xa01.5571.5\xc2\xa0\xc2\xb1\xc2\xa01.3879.5\xc2\xa0\xc2\xb1\xc2\xa010.8617.8\xc2\xa0\xc2\xb1\xc2\xa02.1223.4\xc2\xa0\xc2\xb1\xc2\xa01.3231.3\xc2\xa0\xc2\xb1\xc2\xa01.3231.4\xc2\xa0\xc2\xb1\xc2\xa01.1594.6\xc2\xa0\xc2\xb1\xc2\xa01.9572.2\xc2\xa0\xc2\xb1\xc2\xa00.8
类型转换353.3\xc2\xa0\xc2\xb1\xc2\xa02.5 \xc2\xa0267.5\xc2\xa0\xc2\xb1\xc2\xa01.7 \xc2\xa0248.0\xc2\xa0\xc2\xb1\xc2\xa01.6 \xc2\xa0243.8\xc2\xa0\xc2\xb1\xc2\xa01.2 \xc2\xa0154.2\xc2\xa0\xc2\xb1\xc2\xa00.8 \xc2\xa0154.1\xc2\xa0\xc2\xb1\xc2\xa01.0 \xc2\xa0263.8\xc2\xa0\xc2\xb1\xc2\xa01.8 \xc2\xa0365.5\xc2\xa0\xc2\xb1\xc2\xa01.6 \xc2\xa0316.9\xc2\xa0\xc2\xb1\xc2\xa01.8 \xc2\xa0189.7\xc2\xa0\xc2\xb1\xc2\xa02.1 \xc2\xa0156.3\xc2\xa0\xc2\xb1\xc2\xa01.8 \xc2\xa0157.0\xc2\xa0\xc2\xb1\xc2\xa02.2 \xc2\xa0155.1\xc2\xa0\xc2\xb1\xc2\xa00.9 \xc2\xa0176.5\xc2\xa0\xc2\xb1\xc2\xa01.2 \xc2\xa0
int
杰沃德307.9\xc2\xa0\xc2\xb1\xc2\xa01.3 \xc2\xa0175.4\xc2\xa0\xc2\xb1\xc2\xa00.9 \xc2\xa0175.3\xc2\xa0\xc2\xb1\xc2\xa00.5 \xc2\xa0175.4\xc2\xa0\xc2\xb1\xc2\xa00.6 \xc2\xa0175.2\xc2\xa0\xc2\xb1\xc2\xa00.5175.1\xc2\xa0\xc2\xb1\xc2\xa00.6175.1\xc2\xa0\xc2\xb1\xc2\xa00.5 \xc2\xa0307.4\xc2\xa0\xc2\xb1\xc2\xa01.2 \xc2\xa0219.6\xc2\xa0\xc2\xb1\xc2\xa00.6 \xc2\xa0146.0\xc2\xa0\xc2\xb1\xc2\xa00.3 \xc2\xa0153.5\xc2\xa0\xc2\xb1\xc2\xa00.5153.6\xc2\xa0\xc2\xb1\xc2\xa00.8175.4\xc2\xa0\xc2\xb1\xc2\xa00.7 \xc2\xa0175.2\xc2\xa0\xc2\xb1\xc2\xa00.5 \xc2\xa0
福格特模数528.5\xc2\xa0\xc2\xb1\xc2\xa01.9351.9\xc2\xa0\xc2\xb1\xc2\xa04.6175.3\xc2\xa0\xc2\xb1\xc2\xa00.6 \xc2\xa0175.2\xc2\xa0\xc2\xb1\xc2\xa00.4 \xc2\xa0197.1\xc2\xa0\xc2\xb1\xc2\xa00.6175.2\xc2\xa0\xc2\xb1\xc2\xa00.8373.5\xc2\xa0\xc2\xb1\xc2\xa01.1598.7\xc2\xa0\xc2\xb1\xc2\xa05.1460.6\xc2\xa0\xc2\xb1\xc2\xa01.3175.4\xc2\xa0\xc2\xb1\xc2\xa00.4164.3\xc2\xa0\xc2\xb1\xc2\xa00.9164.0\xc2\xa0\xc2\xb1\xc2\xa00.4176.3\xc2\xa0\xc2\xb1\xc2\xa01.6 \xc2\xa0460.0\xc2\xa0\xc2\xb1\xc2\xa00.8
Voigt无模398.0\xc2\xa0\xc2\xb1\xc2\xa02.5241.0\xc2\xa0\xc2\xb1\xc2\xa00.7199.4\xc2\xa0\xc2\xb1\xc2\xa05.1219.2\xc2\xa0\xc2\xb1\xc2\xa01.0175.9\xc2\xa0\xc2\xb1\xc2\xa01.2197.7\xc2\xa0\xc2\xb1\xc2\xa01.2242.9\xc2\xa0\xc2\xb1\xc2\xa03.0543.5\xc2\xa0\xc2\xb1\xc2\xa02.3350.6\xc2\xa0\xc2\xb1\xc2\xa01.0186.6\xc2\xa0\xc2\xb1\xc2\xa01.2185.7\xc2\xa0\xc2\xb1\xc2\xa00.3186.3\xc2\xa0\xc2\xb1\xc2\xa01.1197.1\xc2\xa0\xc2\xb1\xc2\xa00.6373.3\xc2\xa0\xc2\xb1\xc2\xa01.6
类型转换338.8\xc2\xa0\xc2\xb1\xc2\xa04.9228.1\xc2\xa0\xc2\xb1\xc2\xa00.9230.3\xc2\xa0\xc2\xb1\xc2\xa00.8229.5\xc2\xa0\xc2\xb1\xc2\xa09.4153.8\xc2\xa0\xc2\xb1\xc2\xa00.4 \xc2\xa0138.3\xc2\xa0\xc2\xb1\xc2\xa01.0 \xc2\xa0241.1\xc2\xa0\xc2\xb1\xc2\xa01.1590.0\xc2\xa0\xc2\xb1\xc2\xa02.1589.9\xc2\xa0\xc2\xb1\xc2\xa00.8155.2\xc2\xa0\xc2\xb1\xc2\xa02.4149.4\xc2\xa0\xc2\xb1\xc2\xa01.6 \xc2\xa0148.4\xc2\xa0\xc2\xb1\xc2\xa01.2 \xc2\xa0214.6\xc2\xa0\xc2\xb1\xc2\xa02.2211.7\xc2\xa0\xc2\xb1\xc2\xa01.6
long
杰沃德758.1\xc2\xa0\xc2\xb1\xc2\xa01.8600.6\xc2\xa0\xc2\xb1\xc2\xa00.9601.5\xc2\xa0\xc2\xb1\xc2\xa02.2601.5\xc2\xa0\xc2\xb1\xc2\xa02.8581.2\xc2\xa0\xc2\xb1\xc2\xa01.9600.6\xc2\xa0\xc2\xb1\xc2\xa01.8586.3\xc2\xa0\xc2\xb1\xc2\xa03.6745.9\xc2\xa0\xc2\xb1\xc2\xa03.6685.8\xc2\xa0\xc2\xb1\xc2\xa02.2183.1\xc2\xa0\xc2\xb1\xc2\xa01.0182.5\xc2\xa0\xc2\xb1\xc2\xa00.5182.6\xc2\xa0\xc2\xb1\xc2\xa00.6553.2\xc2\xa0\xc2\xb1\xc2\xa01.5488.0\xc2\xa0\xc2\xb1\xc2\xa00.8
福格特模数1,360.8\xc2\xa0\xc2\xb1\xc2\xa06.11,202.0\xc2\xa0\xc2\xb1\xc2\xa02.1600.0\xc2\xa0\xc2\xb1\xc2\xa02.4600.0\xc2\xa0\xc2\xb1\xc2\xa03.0607.0\xc2\xa0\xc2\xb1\xc2\xa06.8599.0\xc2\xa0\xc2\xb1\xc2\xa01.61,187.2\xc2\xa0\xc2\xb1\xc2\xa02.61,439.6\xc2\xa0\xc2\xb1\xc2\xa06.71,346.5\xc2\xa0\xc2\xb1\xc2\xa02.9197.9\xc2\xa0\xc2\xb1\xc2\xa00.7208.2\xc2\xa0\xc2\xb1\xc2\xa00.6208.0\xc2\xa0\xc2\xb1\xc2\xa00.4548.9\xc2\xa0\xc2\xb1\xc2\xa01.41,326.4\xc2\xa0\xc2\xb1\xc2\xa03.0
Voigt无模844.5\xc2\xa0\xc2\xb1\xc2\xa06.9647.3\xc2\xa0\xc2\xb1\xc2\xa01.3628.9\xc2\xa0\xc2\xb1\xc2\xa01.8627.9\xc2\xa0\xc2\xb1\xc2\xa01.6629.1\xc2\xa0\xc2\xb1\xc2\xa02.4629.6\xc2\xa0\xc2\xb1\xc2\xa04.4668.2\xc2\xa0\xc2\xb1\xc2\xa02.71,019.5\xc2\xa0\xc2\xb1\xc2\xa03.2715.1\xc2\xa0\xc2\xb1\xc2\xa08.2224.3\xc2\xa0\xc2\xb1\xc2\xa04.8219.0\xc2\xa0\xc2\xb1\xc2\xa01.0219.0\xc2\xa0\xc2\xb1\xc2\xa00.6561.7\xc2\xa0\xc2\xb1\xc2\xa02.5769.4\xc2\xa0\xc2\xb1\xc2\xa09.3
类型转换366.1\xc2\xa0\xc2\xb1\xc2\xa00.8 \xc2\xa0246.2\xc2\xa0\xc2\xb1\xc2\xa01.1 \xc2\xa0245.3\xc2\xa0\xc2\xb1\xc2\xa01.8 \xc2\xa0244.6\xc2\xa0\xc2\xb1\xc2\xa01.1 \xc2\xa0154.6\xc2\xa0\xc2\xb1\xc2\xa01.6 \xc2\xa0154.3\xc2\xa0\xc2\xb1\xc2\xa00.5 \xc2\xa0257.4\xc2\xa0\xc2\xb1\xc2\xa01.5 \xc2\xa0591.8\xc2\xa0\xc2\xb1\xc2\xa04.1 \xc2\xa0590.4\xc2\xa0\xc2\xb1\xc2\xa01.3 \xc2\xa0154.5\xc2\xa0\xc2\xb1\xc2\xa01.3 \xc2\xa0135.4\xc2\xa0\xc2\xb1\xc2\xa08.3 \xc2\xa0132.9\xc2\xa0\xc2\xb1\xc2\xa00.7 \xc2\xa0132.8\xc2\xa0\xc2\xb1\xc2\xa01.2 \xc2\xa0177.4\xc2\xa0\xc2\xb1\xc2\xa02.3 \xc2\xa0
\n
\n

现在我终于可以继续我的生活了:P

\n